Add interesting demos

This commit is contained in:
Valk Richard Li 2019-11-27 20:06:45 +08:00 committed by GitHub
parent e66e6c2690
commit 1608a120e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 202 additions and 0 deletions

131
balloon/example/bp.nas Normal file
View File

@ -0,0 +1,131 @@
var neuron=
{
in:0,
out:0,
diff:0,
bia:0,
w:[]
};
var INUM=2;
var HNUM=4;
var ONUM=1;
var input_layer=[];
var hidden=[];
var output=[];
var expect=[];
var difftanh=func(x)
{
var ret=tanh(x);
return 1-ret*ret;
};
var diffsigmoid=func(x)
{
var ret=sigmoid(x);
return ret*(1-ret);
};
var init=func()
{
for(var i=0;i<INUM;i+=1){append(input_layer,0);}
for(var i=0;i<HNUM;i+=1)
{
append(hidden,neuron);
for(var j=0;j<INUM;j+=1){append(hidden[i].w,rand());}
hidden[i].bia=rand();
}
for(var i=0;i<ONUM;i+=1)
{
append(expect,0);
append(output,neuron);
for(var j=0;j<HNUM;j+=1){append(output[i].w,rand());}
output[i].bia=rand();
}
return;
};
var calc=func()
{
for(var i=0;i<HNUM;i+=1)
{
hidden[i].in=hidden[i].bia;
for(var j=0;j<INUM;j+=1){hidden[i].in+=input_layer[j]*hidden[i].w[j];}
hidden[i].out=tanh(hidden[i].in);
}
for(var i=0;i<ONUM;i+=1)
{
output[i].in=output[i].bia;
for(var j=0;j<HNUM;j+=1){output[i].in+=hidden[j].out*output[i].w[j];}
output[i].out=sigmoid(output[i].in);
}
var error=0;
for(var i=0;i<ONUM;i+=1){error+=(expect[i]-output[i].out)*(expect[i]-output[i].out);}
error*=0.5;
return error;
};
var back=func()
{
var lr=0.9;
for(var i=0;i<ONUM;i+=1){output[i].diff=(expect[i]-output[i].out)*diffsigmoid(output[i].in);}
for(var i=0;i<HNUM;i+=1)
{
hidden[i].diff=0;
for(var j=0;j<ONUM;j+=1){hidden[i].diff+=output[j].diff*output[j].w[i];}
hidden[i].diff*=difftanh(hidden[i].in);
}
for(var i=0;i<HNUM;i+=1)
{
hidden[i].bia+=lr*hidden[i].diff;
for(var j=0;j<INUM;j+=1){hidden[i].w[j]+=lr*input_layer[j]*hidden[i].diff;}
}
for(var i=0;i<ONUM;i+=1)
{
output[i].bia+=lr*output[i].diff;
for(var j=0;j<HNUM;j+=1){output[i].w[j]+=lr*hidden[j].out*output[i].diff;}
}
return;
};
init();
var cnt=0;
var total_error=10;
while(total_error>0.001)
{
total_error=0;
input_layer[0]=1;input_layer[1]=1;expect[0]=1;
total_error+=calc();
back();
input_layer[0]=1;input_layer[1]=0;expect[0]=1;
total_error+=calc();
back();
input_layer[0]=0;input_layer[1]=1;expect[0]=1;
total_error+=calc();
back();
input_layer[0]=0;input_layer[1]=0;expect[0]=0;
total_error+=calc();
back();
cnt+=1;
if(cnt==10)
{
print('10 times: ',total_error,'\n');
cnt=0;
}
}
input_layer[0]=1;input_layer[1]=1;expect[0]=1;
calc();
print('1 or 1: ',output[0].out,'\n');
input_layer[0]=1;input_layer[1]=0;expect[0]=1;
calc();
print('1 or 0: ',output[0].out,'\n');
input_layer[0]=0;input_layer[1]=1;expect[0]=1;
calc();
print('0 or 1: ',output[0].out,'\n');
input_layer[0]=0;input_layer[1]=0;expect[0]=0;
calc();
print('0 or 0: ',output[0].out,'\n');

View File

@ -0,0 +1,71 @@
var resource=[];
var data=[];
var ptr=0;
for(var i=0;i<1024;i+=1){append(data,0);}
var input_file=func(str)
{
resource=[];
var res=read(str);
for(var i=0;i<size(res);i+=1)
{
var ch=chars(res[i]);
for(var j=0;j<size(ch);j+=1){append(resource,ch[j]);}
}
return;
};
var runloop=func(times,begin)
{
var ends=begin;
for(var t=0;t<times;t+=1)
{
for(var i=begin;i<size(resource);i+=1)
{
if(resource[i]=='+'){data[ptr]+=1;}
else if(resource[i]=='-'){data[ptr]-=1;}
else if(resource[i]=='>'){ptr+=1;}
else if(resource[i]=='<'){ptr-=1;}
else if(resource[i]=='.'){print(data[ptr],' ');}
else if(resource[i]==','){data[ptr]=num(input());}
else if(resource[i]=='[')
{
var t_ends=runloop(data[ptr],i+1);
i=t_ends;
}
else if(resource[i]==']'){ends=i;break;}
else{print('error token: ',resource[i],'\n');}
}
}
return ends;
};
var runtime=func()
{
for(var i=0;i<1024;i+=1){data[i]=0;}
ptr=0;
for(var i=0;i<size(resource);i+=1)
{
if(resource[i]=='+'){data[ptr]+=1;}
else if(resource[i]=='-'){data[ptr]-=1;}
else if(resource[i]=='>'){ptr+=1;}
else if(resource[i]=='<'){ptr-=1;}
else if(resource[i]=='.'){print(data[ptr],' ');}
else if(resource[i]==','){data[ptr]=num(input());}
else if(resource[i]=='[')
{
var ends=runloop(data[ptr],i+1);
i=ends;
}
else{print('error token: ',resource[i],'\n');}
}
return;
};
while(1)
{
print("bf> ");
var filename=input();
if(filename=='exit'){break;}
input_file(filename);
runtime();
print('\n');
}