mirror of
https://github.com/ValKmjolnir/Nasal-Interpreter.git
synced 2026-07-23 11:28:45 +08:00
📝 unify code style of ./stl ./test
This commit is contained in:
+21
-42
@@ -1,7 +1,6 @@
|
||||
rand(time(0));
|
||||
|
||||
var new_neuron=func()
|
||||
{
|
||||
var new_neuron=func(){
|
||||
return {
|
||||
in:0,
|
||||
out:0,
|
||||
@@ -11,22 +10,18 @@ var new_neuron=func()
|
||||
};
|
||||
}
|
||||
|
||||
var tanh=func(x)
|
||||
{
|
||||
var tanh=func(x){
|
||||
var (a,b)=(math.exp(x),math.exp(-x));
|
||||
return (a-b)/(a+b);
|
||||
}
|
||||
var difftanh=func(x)
|
||||
{
|
||||
var difftanh=func(x){
|
||||
x=tanh(x);
|
||||
return 1-x*x;
|
||||
}
|
||||
var sigmoid=func(x)
|
||||
{
|
||||
var sigmoid=func(x){
|
||||
return 1/(1+math.exp(-x));
|
||||
}
|
||||
var diffsigmoid=func(x)
|
||||
{
|
||||
var diffsigmoid=func(x){
|
||||
x=sigmoid(x);
|
||||
return x*(1-x);
|
||||
}
|
||||
@@ -36,8 +31,7 @@ var training_set=[[0,0],[0,1],[1,0],[1,1]];
|
||||
var expect=[0,1,1,0];
|
||||
|
||||
var hidden=[];
|
||||
for(var i=0;i<hnum;i+=1)
|
||||
{
|
||||
for(var i=0;i<hnum;i+=1){
|
||||
append(hidden,new_neuron());
|
||||
for(var j=0;j<inum;j+=1)
|
||||
append(hidden[i].w,rand()>0.5?-2*rand():2*rand());
|
||||
@@ -45,26 +39,22 @@ for(var i=0;i<hnum;i+=1)
|
||||
}
|
||||
|
||||
var output=[];
|
||||
for(var i=0;i<onum;i+=1)
|
||||
{
|
||||
for(var i=0;i<onum;i+=1){
|
||||
append(output,new_neuron());
|
||||
for(var j=0;j<hnum;j+=1)
|
||||
append(output[i].w,rand()>0.5?-2*rand():2*rand());
|
||||
output[i].bia=rand()>0.5?-5*rand():5*rand();
|
||||
}
|
||||
|
||||
var forward=func(x)
|
||||
{
|
||||
var forward=func(x){
|
||||
var input=training_set[x];
|
||||
for(var i=0;i<hnum;i+=1)
|
||||
{
|
||||
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+=hidden[i].w[j]*input[j];
|
||||
hidden[i].out=tanh(hidden[i].in);
|
||||
}
|
||||
for(var i=0;i<onum;i+=1)
|
||||
{
|
||||
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+=output[i].w[j]*hidden[j].out;
|
||||
@@ -72,18 +62,15 @@ var forward=func(x)
|
||||
}
|
||||
return;
|
||||
}
|
||||
var run=func(vec)
|
||||
{
|
||||
var run=func(vec){
|
||||
var input=vec;
|
||||
for(var i=0;i<hnum;i+=1)
|
||||
{
|
||||
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+=hidden[i].w[j]*input[j];
|
||||
hidden[i].out=tanh(hidden[i].in);
|
||||
}
|
||||
for(var i=0;i<onum;i+=1)
|
||||
{
|
||||
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+=output[i].w[j]*hidden[j].out;
|
||||
@@ -91,29 +78,24 @@ var run=func(vec)
|
||||
}
|
||||
return;
|
||||
}
|
||||
var get_error=func(x)
|
||||
{
|
||||
var get_error=func(x){
|
||||
return 0.5*(expect[x]-output[0].out)*(expect[x]-output[0].out);
|
||||
}
|
||||
var backward=func(x)
|
||||
{
|
||||
var backward=func(x){
|
||||
var input=training_set[x];
|
||||
output[0].diff=(expect[x]-output[0].out)*diffsigmoid(output[0].in);
|
||||
for(var i=0;i<hnum;i+=1)
|
||||
{
|
||||
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].w[i]*output[j].diff;
|
||||
hidden[i].diff*=difftanh(hidden[i].in);
|
||||
}
|
||||
for(var i=0;i<hnum;i+=1)
|
||||
{
|
||||
for(var i=0;i<hnum;i+=1){
|
||||
hidden[i].bia+=hidden[i].diff;
|
||||
for(var j=0;j<inum;j+=1)
|
||||
hidden[i].w[j]+=hidden[i].diff*input[j];
|
||||
}
|
||||
for(var i=0;i<onum;i+=1)
|
||||
{
|
||||
for(var i=0;i<onum;i+=1){
|
||||
output[i].bia+=output[i].diff;
|
||||
for(var j=0;j<hnum;j+=1)
|
||||
output[i].w[j]+=output[i].diff*hidden[j].out;
|
||||
@@ -122,11 +104,9 @@ var backward=func(x)
|
||||
}
|
||||
|
||||
var (cnt,error)=(0,100);
|
||||
while(error>0.0005)
|
||||
{
|
||||
while(error>0.0005){
|
||||
error=0;
|
||||
for(var i=0;i<4;i+=1)
|
||||
{
|
||||
for(var i=0;i<4;i+=1){
|
||||
forward(i);
|
||||
error+=get_error(i);
|
||||
backward(i);
|
||||
@@ -134,8 +114,7 @@ while(error>0.0005)
|
||||
cnt+=1;
|
||||
}
|
||||
print('finished after ',cnt,' epoch.\n');
|
||||
foreach(var v;training_set)
|
||||
{
|
||||
foreach(var v;training_set){
|
||||
run(v);
|
||||
print(v,': ',output[0].out,'\n');
|
||||
}
|
||||
Reference in New Issue
Block a user