нейросеть

Graphics 640,480,24,2
font=LoadFont("system")
SetFont(font)
Include "Text.bb"
Dim knowledge$(100000)
Dim weights#(4,4)
Dim layers#(4,4)
Global weight#=0.5
Global LastError#=1
Global Smoothing#=0.5
Global WORD_NUM
For j=1 To 3
For i=1 To 3
weights(i,j)=0.5
Next
Next
For j=1 To 3
For i=1 To 3
layers(i,j)=1
Next
Next
f=ReadFile("weight.txt")
If f Then
For j=1 To 3
For i=1 To 3
weights(i,j)=ReadFloat(f)
Next
Next
EndIf
f=ReadFile("layer.txt")
If f Then
For j=1 To 3
For i=1 To 3
layers(i,j)=ReadFloat(f)
Next
Next
EndIf
Function Ns_train(v1#,v2#)
LastError#=1
Smoothing#=0.5
i=0
While(LastError > Smoothing Or LastError < -Smoothing)
i=i+1
Train(v1,v2)
Print "iteration "+i+" error "+LastError
If LastError<1 Return
Wend
End Function
Function ProcessInputData#(input_#)
Return input_*weight;
End Function
Function RestoreInputData#(output#)
Return output/weight;
End Function
Function Train(input_#, exResult#)
aRes#=input_*weight
LastError=exResult - aRes
correction#=(lasterror/aRes)*Smoothing
weight=weight+correction
End Function
ReadKnowledge()
While(1)
txt$=Input("input> ")
TextBegin(txt)
While(TextReadWord())
AddToKnowledgeWord(g_text_word)
Wend
TextBegin(txt)
y=1
While TextReadWord()
layers(1,y)=String_To_Vec(g_text_word);
y=y+1
Wend
For x=1 To 3
For y=1 To 3
weight=weights(x,y)
If(weight<=0.1 Or weight>=1)weight=Rnd(0.11,0.9)
Ns_train(layers(x,y),layers(x,y+1))
weights(x,y)=weight
layers(x+1,y)=ProcessInputData(layers(x,y))
Next
Next
For y=1 To 3
Print layers(1,y)+" "+layers(2,y)+" "+layers(3,y)
Next
txt=""
For y=1 To 3
txt=txt+" "+Vec_To_String(layers(3,y));
Next
Print txt
f=WriteFile("weight.txt")
For j=1 To 3
For i=1 To 3
WriteFloat(f,weights(i,j));
Next
Next
f=WriteFile("layer.txt")
For j=1 To 3
For i=1 To 3
WriteFloat(f,layers(i,j));
Next
Next
Wend
;inp=Input("input> ")
Print " ProcessInputData input "+inp+" "+ProcessInputData(inp)
WaitKey()
;------------------------------------
Function String_To_Vec(s$)
For i=1 To WORD_NUM
If knowledge(i)=s$ Return i
Next
Return 0
End Function
Function Vec_To_String$(v)
If v>=1 And v<=WORD_NUM Return knowledge(v);
Return ""
End Function
;------------------------------------
;--------------------------------------------------------------------------------
Function AddToKnowledgeWord(s$)
If Word_Qu(s)>0 Then
;AddToChat("word already exist")
Return
EndIf
If(s = "") Return
f=FileOpen("knowledge.txt")
SeekFile(f, FileSize("knowledge.txt"));
WriteLine(f, s)
WORD_NUM=WORD_NUM+1
CloseFile(f);
ReadKnowledge()
;AddToChat("word added")
End Function
Function ReadKnowledge()
WORD_NUM=0
file1=FileOpen("knowledge.txt");
While(Eof(file1)<>1)
WORD_NUM=WORD_NUM+1
knowledge(WORD_NUM) = ReadLine(file1);
Wend
CloseFile(file1)
End Function
Function Word_Qu(w$)
q=0
ReadKnowledge()
For i=1 To WORD_NUM
If w=knowledge(i) q=q+1
Next
Return q
End Function
Function FileOpen(fn$)
file1 = OpenFile(fn$);
If(file1=0)file1=WriteFile(fn$);
Return file1;
End Function