🐛 visual changement & bug fix in test/json.nas & optimize test/bp.nas
This commit is contained in:
parent
882ecac100
commit
ab37495960
|
@ -633,10 +633,10 @@ void nasal_gc::info()
|
||||||
"hash ","upval","obj ",
|
"hash ","upval","obj ",
|
||||||
"co "
|
"co "
|
||||||
};
|
};
|
||||||
std::cout<<"\ngarbage collector info:\n";
|
std::cout<<"\ngarbage collector info\n";
|
||||||
for(uint8_t i=vm_str;i<vm_type_size;++i)
|
for(uint8_t i=vm_str;i<vm_type_size;++i)
|
||||||
std::cout<<" "<<name[i]<<" | "<<count[i]<<"\n";
|
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)
|
for(uint8_t i=vm_str;i<vm_type_size;++i)
|
||||||
std::cout<<" "<<name[i]<<" | "<<initialize[i]+size[i]*increment[i]<<"(+"<<size[i]<<")\n";
|
std::cout<<" "<<name[i]<<" | "<<initialize[i]+size[i]*increment[i]<<"(+"<<size[i]<<")\n";
|
||||||
}
|
}
|
||||||
|
|
|
@ -363,7 +363,7 @@ void nasal_vm::opcallsort(const uint64_t* arr)
|
||||||
opcall.end(),
|
opcall.end(),
|
||||||
[](op& a,op& b){return a.second>b.second;}
|
[](op& a,op& b){return a.second>b.second;}
|
||||||
);
|
);
|
||||||
std::cout<<"\noperands call info:";
|
std::cout<<"\noperands call info";
|
||||||
uint64_t total=0;
|
uint64_t total=0;
|
||||||
for(auto& i:opcall)
|
for(auto& i:opcall)
|
||||||
{
|
{
|
||||||
|
@ -386,7 +386,7 @@ void nasal_vm::die(std::string str)
|
||||||
inline bool nasal_vm::condition(nasal_ref val)
|
inline bool nasal_vm::condition(nasal_ref val)
|
||||||
{
|
{
|
||||||
if(val.type==vm_num)
|
if(val.type==vm_num)
|
||||||
return val.value.num;
|
return val.num();
|
||||||
else if(val.type==vm_str)
|
else if(val.type==vm_str)
|
||||||
{
|
{
|
||||||
double num=str2num(val.str().c_str());
|
double num=str2num(val.str().c_str());
|
||||||
|
|
26
test/bp.nas
26
test/bp.nas
|
@ -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)
|
var sigmoid=func(x)
|
||||||
{
|
{
|
||||||
return 1/(1+math.exp(-x));
|
return 1/(1+math.exp(-x));
|
||||||
|
@ -21,7 +31,7 @@ var diffsigmoid=func(x)
|
||||||
return x*(1-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 training_set=[[0,0],[0,1],[1,0],[1,1]];
|
||||||
var expect=[0,1,1,0];
|
var expect=[0,1,1,0];
|
||||||
|
|
||||||
|
@ -30,8 +40,8 @@ for(var i=0;i<hnum;i+=1)
|
||||||
{
|
{
|
||||||
append(hidden,new_neuron());
|
append(hidden,new_neuron());
|
||||||
for(var j=0;j<inum;j+=1)
|
for(var j=0;j<inum;j+=1)
|
||||||
append(hidden[i].w,2*rand());
|
append(hidden[i].w,rand()>0.5?-2*rand():2*rand());
|
||||||
hidden[i].bia=5*rand();
|
hidden[i].bia=rand()>0.5?-5*rand():5*rand();
|
||||||
}
|
}
|
||||||
|
|
||||||
var output=[];
|
var output=[];
|
||||||
|
@ -39,8 +49,8 @@ for(var i=0;i<onum;i+=1)
|
||||||
{
|
{
|
||||||
append(output,new_neuron());
|
append(output,new_neuron());
|
||||||
for(var j=0;j<hnum;j+=1)
|
for(var j=0;j<hnum;j+=1)
|
||||||
append(output[i].w,2*rand());
|
append(output[i].w,rand()>0.5?-2*rand():2*rand());
|
||||||
output[i].bia=5*rand();
|
output[i].bia=rand()>0.5?-5*rand():5*rand();
|
||||||
}
|
}
|
||||||
|
|
||||||
var forward=func(x)
|
var forward=func(x)
|
||||||
|
@ -51,7 +61,7 @@ var forward=func(x)
|
||||||
hidden[i].in=hidden[i].bia;
|
hidden[i].in=hidden[i].bia;
|
||||||
for(var j=0;j<inum;j+=1)
|
for(var j=0;j<inum;j+=1)
|
||||||
hidden[i].in+=hidden[i].w[j]*input[j];
|
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)
|
for(var i=0;i<onum;i+=1)
|
||||||
{
|
{
|
||||||
|
@ -70,7 +80,7 @@ var run=func(vec)
|
||||||
hidden[i].in=hidden[i].bia;
|
hidden[i].in=hidden[i].bia;
|
||||||
for(var j=0;j<inum;j+=1)
|
for(var j=0;j<inum;j+=1)
|
||||||
hidden[i].in+=hidden[i].w[j]*input[j];
|
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)
|
for(var i=0;i<onum;i+=1)
|
||||||
{
|
{
|
||||||
|
@ -94,7 +104,7 @@ var backward=func(x)
|
||||||
hidden[i].diff=0;
|
hidden[i].diff=0;
|
||||||
for(var j=0;j<onum;j+=1)
|
for(var j=0;j<onum;j+=1)
|
||||||
hidden[i].diff+=output[j].w[i]*output[j].diff;
|
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)
|
for(var i=0;i<hnum;i+=1)
|
||||||
{
|
{
|
||||||
|
|
|
@ -226,6 +226,8 @@ var JSON=func(){
|
||||||
var member=func(hash)
|
var member=func(hash)
|
||||||
{
|
{
|
||||||
var name=token.content;
|
var name=token.content;
|
||||||
|
if(token.type==j_rbrace)
|
||||||
|
return;
|
||||||
if(token.type==j_str)
|
if(token.type==j_str)
|
||||||
match(j_str);
|
match(j_str);
|
||||||
else
|
else
|
||||||
|
@ -316,6 +318,10 @@ var ss=JSON.stringify({
|
||||||
m3:[114514],
|
m3:[114514],
|
||||||
m4:{year:1919,month:8,date:10}
|
m4:{year:1919,month:8,date:10}
|
||||||
},
|
},
|
||||||
|
emptyhash:{},
|
||||||
|
emptyvec:[],
|
||||||
|
empty:[{}],
|
||||||
|
empty_an:[[[[[[{}]]]]]],
|
||||||
function:func(){}
|
function:func(){}
|
||||||
});
|
});
|
||||||
println(ss);
|
println(ss);
|
||||||
|
|
Loading…
Reference in New Issue