Tôi có đoạn code trí tuệ nhân tạo sau:
var inputdone = [[0,1,0], [1,0,0], [1,0,1], [0,1,1], [1,1,1], [0,0,0]];
var outputdone =[[1,0,1], [0,1,1], [0,1,0], [1,0,0], [0,0,0], [1,1,1]];
var WeightIt = [[[0,0,0],[0,0,0],[0,0,0]],[[0,0,0],[0,0,0],[0,0,0],[0,0,0]],[[0,0,0,0],[0,0,0,0],[0,0,0,0]]];
var SpeedN=1;
function randomweight(){
return Math.random() * 2 + -1;
}
for(var i=0;i<WeightIt.length;i++){
for(var i2=0;i2<WeightIt[i].length;i2++){
for(var i3=0;i3<WeightIt[i][i2].length;i3++){
WeightIt[i][i2][i3] = randomweight();
}
}
}
function Neurol(x,w){
var SumOfthis=0;
for (var i = 0; i < x.length; i++){
SumOfthis += w[i]*x[i];
}
return 1/(1+Math.exp(-SumOfthis));
}
function ActionNetworkNeurol(input){
var input2=[];
for(var i=0;i<WeightIt.length;i++){
input2.splice(0,input2.length);
for(var i2=0;i2<WeightIt[i].length;i2++){
input2[i2]=Neurol(input,WeightIt[i][i2]);
}
input.splice(0,input.length);
input=CopyA(input2);
//console.log(input);
}
return input;
}
function ChangeWeight(weight,trasoutput,trasinput,output){
var Errro=output*(1-output)*(trasoutput-output);
return weight+SpeedN*trasinput*Errro;
}
function ErrorWeight(trasoutput,output){
var ErrorHaveChanged=[];
for(var i=0;i<output.length;i++){
ErrorHaveChanged[i]=output[i]*(1-output[i])*(trasoutput[i]-output[i]);
}
return ErrorHaveChanged;
}
function ChangeWeightHide(weight,error,outa,ina,wa){
var ASum=0;
for(var i=0;i<wa.length;i++){
ASum+=wa[i]*error[i];
}
return weight+SpeedN*ina*outa*(1-outa)*ASum;
}
function ErrorWeightHide(wa,error,outa){
var ErrorHaveChanged=[];
var ASum=0;
for(var i=0;i<wa.length;i++){
ASum+=wa[i]*error[i];
}
return outa*(1-outa)*ASum;
}
function ActionSimpleClassNeurol(input, NumberBack){
var input2 = new Array();
var inputCS=CopyA(input);
for(var i=0;i<WeightIt.length;i++){
input2.splice(0,input2.length);
for(var i2=0;i2<WeightIt[i].length;i2++){
input2[i2]=Neurol(inputCS,WeightIt[i][i2]);
}
inputCS.splice(0,inputCS.length);
inputCS=CopyA(input2);
if(i>=(WeightIt.length-NumberBack-1)){
break;
}
}
return inputCS;
}
function CopyA(ARRay){
var DDDsa = new Array();
DDDsa = [...ARRay];
return DDDsa;
}
function LearningDeep(input2c,output2c){
var inputdone2=CopyA(input2c);
var outputdone2=CopyA(output2c);
var ErrorD=[];
for(var i=WeightIt.length-1;i>=0;i--){
var FHH=WeightIt.length-i-1;
var ACtu1=ActionSimpleClassNeurol(inputdone2,FHH);
var ACtu2=ActionSimpleClassNeurol(inputdone2,FHH+1);
var OldErrorD=CopyA(ErrorD);
ErrorD.splice(0,ErrorD.length);
if(i==WeightIt.length-1){
ErrorD=ErrorWeight(outputdone2,ACtu1);
for(var i2=0;i2<WeightIt[i].length;i2++){
for(var i3=0;i3<WeightIt[i][i2].length;i3++){
WeightIt[i][i2][i3]=ChangeWeight(WeightIt[i][i2][i3],outputdone2[i2],ACtu2[i3],ACtu1[i2]);
}
}
} else {
for(var i2=0;i2<WeightIt[i].length;i2++){
var DkJ=new Array();
for(var i4=0;i4<WeightIt[i+1].length;i4++){
DkJ.push(WeightIt[i+1][i4][i2]);
}
var DCSJ =ErrorWeightHide(DkJ,OldErrorD,ACtu1[i2]);
for(var i3=0;i3<WeightIt[i][i2].length;i3++){
WeightIt[i][i2][i3]=ChangeWeightHide(WeightIt[i][i2][i3],OldErrorD,ACtu1[i2],ACtu2[i3],DkJ);
}
ErrorD[i2]=DCSJ;
}
}
}
}
for(var i2=0;i2<100000;i2++){
for(var i=0;i<inputdone.length;i++){
LearningDeep(inputdone[i],outputdone[i]);
}
}
Khi cho mạng neurol chạy thì nó chỉ trả về giá trị nó đã học , còn giá trị mới thì nó không tính ra được