* * *    
Главная » Статьи » Код PB

Просмотров: 1756 | Дата: 08.05.2024 | Коментарии (0)

Нейросеть



Code
ImgCellSize = 20  
Global Dim NeuronInput.f(200/ImgCellSize, 200/ImgCellSize);S-слой  
Global NumOfNeurons = ArraySize(NeuronInput(),1)*ArraySize(NeuronInput(),2)  
Global Dim NeuronALayer.f(NumOfNeurons)  
Global Dim NeuronALayerK.f(NumOfNeurons, NumOfNeurons); Коэффиуенты A-слоя  
Global NeuronR.f = 0.0  

Procedure.f func(x.f)  
  ProcedureReturn 1.0/(1.0 + Pow(2.71, -x))  
EndProcedure  

Procedure InitPerceptron()  
  For C = 0 To NumOfNeurons  
  NeuronALayer(C) = 0.0  
  Next  
   
  For M = 0 To NumOfNeurons  
  For N = 0 To NumOfNeurons  
  NeuronALayerK(M,N) = 1.0 - Random(10000)/5000.0  
  Next  
  Next  
EndProcedure  

Procedure TrainPerceptron(CorrectValue.f, tempo.f)  
  Protected Error.f = CorrectValue - NeuronR  
   
  For M = 0 To NumOfNeurons  
  For N = 0 To NumOfNeurons  
  I = N % ArraySize(NeuronInput(),1)  
  J = N / ArraySize(NeuronInput(),1)  
  NeuronALayerK(M, N) + tempo*NeuronInput(I, J)*Error  
  Next  
  Next  
EndProcedure  

Procedure CalculatePerseptron()  
  NeuronR = 0.0  
   
  For M = 0 To NumOfNeurons  
  NeuronALayer(M) = 0.0  
  For N = 0 To NumOfNeurons  
  I = N % ArraySize(NeuronInput(),1)  
  J = N / ArraySize(NeuronInput(),1)  
  NeuronALayer(M) + NeuronALayerK(M, N)*NeuronInput(I, J)  
  Next  
  NeuronR + NeuronALayer(M)  
  Next  
EndProcedure  

If OpenWindow(0, 100, 100, 400, 280, "Neuron network")  
  Img = CreateImage(#PB_Any, 200, 200, 24)  
  Img2 = CreateImage(#PB_Any, ArraySize(NeuronInput(),1)+1, ArraySize(NeuronInput(),2)+1, 24)  
   
  TextGadget(#PB_Any, 0, 200, 200, 20, "Область рисования", #PB_Text_Center)  
  TextGadget(#PB_Any, 200, 200, 200, 20, "Входы нейросети", #PB_Text_Center)  
  TextGadget(#PB_Any, 10, 220, 150, 20, "Предполагаемое значение:")  
  TextGadget(#PB_Any, 10, 240, 150, 20, "Правильное значение:")  
  TextGadget(#PB_Any, 10, 260, 150, 20, "Темп обучения:")  
  StringGadget(1, 160,220,100,20,"", #PB_String_ReadOnly)  
  StringGadget(2, 160,240,100,20,"")  
  ButtonGadget(3, 270, 220, 100, 20, "Очистить рисунок")  
  ButtonGadget(4, 270, 240, 100, 40, "Тренировать")  
  StringGadget(5, 160, 260,100,20,"0.1")  
   
  AddWindowTimer(0, 1, 50)  
   
  StartDrawing(ImageOutput(Img))  
  Box(0, 0, 199, 199, RGBA(255,255,255,0))  
  StopDrawing()  
   
  InitPerceptron()  
  Repeat  
  EventID = WaitWindowEvent()  
   
  Select EventID  
  Case #WM_LBUTTONDOWN  
  DrawingMode=1  
   
  LastX = WindowMouseX(0)  
  LastY = WindowMouseY(0)  
  Case #WM_LBUTTONUP  
  DrawingMode=0  
  Case #WM_MOUSEMOVE  
  If WindowMouseX(0) < 200 And WindowMouseY(0) < 200 And DrawingMode  
  StartDrawing(ImageOutput(Img))  
  LineXY(WindowMouseX(0), WindowMouseY(0), LastX, LastY, RGBA(255,0,0, 255))  
  StopDrawing()  
  LastX = WindowMouseX(0)  
  LastY = WindowMouseY(0)  
  EndIf  
  Case #PB_Event_Timer  
  If EventTimer() = 1  
  ;Чистим содержимое входов нейросети  
  For I = 0 To ArraySize(NeuronInput(),1)  
  For J = 0 To ArraySize(NeuronInput(),2)  
  NeuronInput(I,J) = 0.0  
  Next  
  Next  
  ;Заполняем входы нейросети значениями цвета из картинки для рисования  
  StartDrawing(ImageOutput(Img))  
  For I = 0 To 200-1  
  For J = 0 To 200-1  
  If Point(I, J) = RGB(255, 0, 0)  
  NeuronInput(I/ImgCellSize, J/ImgCellSize) + 1.0/(ImgCellSize*ImgCellSize)  
  EndIf  
  Next  
  Next  
  StopDrawing()  
  ;Визуализируем содержимое входов нейросети  
  StartDrawing(ImageOutput(Img2))  
  For I = 0 To ArraySize(NeuronInput(),1)  
  For J = 0 To ArraySize(NeuronInput(),2)  
  a = NeuronInput(I,J)*(ImgCellSize*ImgCellSize)  
  Plot(I,J,RGB(a,a,a))  
  Next  
  Next  
  StopDrawing()  
   
  StartDrawing(WindowOutput(0))  
  DrawAlphaImage(ImageID(Img), 0, 0, 64)  
  DrawImage(ImageID(Img2), 200,0,200,200)  
  StopDrawing()  
   
  CalculatePerseptron()  
  SetGadgetText(1, StrF(NeuronR))  
  EndIf  
  Case #PB_Event_Gadget  
  Select EventGadget()  
  Case 3  
  DrawingMode = 0  
   
  StartDrawing(ImageOutput(Img))  
  Box(0, 0, 199, 199, RGBA(255,255,255,0))  
  StopDrawing()  
  Case 4  
  DrawingMode = 0  
   
  TrainPerceptron(ValF(GetGadgetText(2)), ValF(GetGadgetText(5)))  
  EndSelect  
  EndSelect  
  Until EventID = #PB_Event_CloseWindow  
EndIf










Сайт посвящён языку программирования PureBasic — коммерческий компилятор языка программирования, использующего синтаксис BASIC. Предназначен для создания кроссплатформенных приложений для AmigaOS, Linux, Microsoft Windows, Windows NT и Mac OS X. Разработан компанией Fantaisie Software.