🐛 visual changement & bug fix in test/json.nas & optimize test/bp.nas

This commit is contained in:
ValKmjolnir 2022-05-30 21:27:24 +08:00
parent 882ecac100
commit ab37495960
4 changed files with 28 additions and 12 deletions

View File

@ -633,10 +633,10 @@ void nasal_gc::info()
"hash ","upval","obj ",
"co "
};
std::cout<<"\ngarbage collector info:\n";
std::cout<<"\ngarbage collector info\n";
for(uint8_t i=vm_str;i<vm_type_size;++i)
std::cout<<" "<<name[i]<<" | "<<count[i]<<"\n";
std::cout<<"\nmemory allocator info(max size):\n";
std::cout<<"\nmemory allocator info(max size)\n";
for(uint8_t i=vm_str;i<vm_type_size;++i)
std::cout<<" "<<name[i]<<" | "<<initialize[i]+size[i]*increment[i]<<"(+"<<size[i]<<")\n";
}

View File

@ -363,7 +363,7 @@ void nasal_vm::opcallsort(const uint64_t* arr)
opcall.end(),
[](op& a,op& b){return a.second>b.second;}
);
std::cout<<"\noperands call info:";
std::cout<<"\noperands call info";
uint64_t total=0;
for(auto& i:opcall)
{
@ -386,7 +386,7 @@ void nasal_vm::die(std::string str)
inline bool nasal_vm::condition(nasal_ref val)
{
if(val.type==vm_num)
return val.value.num;
return val.num();
else if(val.type==vm_str)
{
double num=str2num(val.str().c_str());

View File

@ -11,6 +11,16 @@ var new_neuron=func()
};
}
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));
@ -21,7 +31,7 @@ var diffsigmoid=func(x)
return x*(1-x);
}
var (inum,hnum,onum,lr)=(2,4,1,0.1);
var (inum,hnum,onum)=(2,4,1);
var training_set=[[0,0],[0,1],[1,0],[1,1]];
var expect=[0,1,1,0];
@ -30,8 +40,8 @@ for(var i=0;i<hnum;i+=1)
{
append(hidden,new_neuron());
for(var j=0;j<inum;j+=1)
append(hidden[i].w,2*rand());
hidden[i].bia=5*rand();
append(hidden[i].w,rand()>0.5?-2*rand():2*rand());
hidden[i].bia=rand()>0.5?-5*rand():5*rand();
}
var output=[];
@ -39,8 +49,8 @@ for(var i=0;i<onum;i+=1)
{
append(output,new_neuron());
for(var j=0;j<hnum;j+=1)
append(output[i].w,2*rand());
output[i].bia=5*rand();
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)
@ -51,7 +61,7 @@ var forward=func(x)
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=sigmoid(hidden[i].in);
hidden[i].out=tanh(hidden[i].in);
}
for(var i=0;i<onum;i+=1)
{
@ -70,7 +80,7 @@ var run=func(vec)
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=sigmoid(hidden[i].in);
hidden[i].out=tanh(hidden[i].in);
}
for(var i=0;i<onum;i+=1)
{
@ -94,7 +104,7 @@ var backward=func(x)
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*=diffsigmoid(hidden[i].in);
hidden[i].diff*=difftanh(hidden[i].in);
}
for(var i=0;i<hnum;i+=1)
{

View File

@ -226,6 +226,8 @@ var JSON=func(){
var member=func(hash)
{
var name=token.content;
if(token.type==j_rbrace)
return;
if(token.type==j_str)
match(j_str);
else
@ -316,6 +318,10 @@ var ss=JSON.stringify({
m3:[114514],
m4:{year:1919,month:8,date:10}
},
emptyhash:{},
emptyvec:[],
empty:[{}],
empty_an:[[[[[[{}]]]]]],
function:func(){}
});
println(ss);