import.stl.mat; rand(time(0)); var new_neuron=func(){ return { in:0, out:0, w:[], bia:0, diff:0 }; } var tanh=func(x){ var (a,b)=(math.exp(x),math.exp(-x)); return (a-b)/(a+b); } var difftanh=func(x){ x=tanh(x); return 1-x*x; } var sigmoid=func(x){ return 1/(1+math.exp(-x)); } var diffsigmoid=func(x){ x=sigmoid(x); return x*(1-x); } var (inum,hnum,onum)=(2,5,1); var training_set=[[0,0],[0,1],[1,0],[1,1]]; var expect=[0,1,1,0]; var hidden=[]; for(var i=0;i0.5?-2*rand():2*rand()); hidden[i].bia=rand()>0.5?-5*rand():5*rand(); } var output=[]; for(var i=0;i0.5?-2*rand():2*rand()); output[i].bia=rand()>0.5?-5*rand():5*rand(); } var forward=func(x){ var input=training_set[x]; for(var i=0;i0.0005){ error=0; for(var i=0;i<4;i+=1){ forward(i); error+=get_error(i); backward(i); } cnt+=1; if(cnt>=1e4) break; } if(cnt>=3e5){ print("failed to train, ",cnt," epoch.\n"); }else{ print('finished after ',cnt,' epoch.\n'); } foreach(var v;training_set){ run(v); print(v,': ',output[0].out,'\n'); } bp_example();