Результаты работы нейросетями

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Результаты работы нейросетями » Остальное » Нейронная сеть на PureBasic'е


Нейронная сеть на PureBasic'е

Сообщений 1 страница 2 из 2

1

https://studentbot.ru/
>>Пример нейросети со скрытыми слоями и базой данных с обучением на Purebasic
>>Создание нейронной сети со скрытыми слоями и обучение на базе данных на PureBasic — это довольно сложная задача, так как PureBasic не является специализированным языком для машинного обучения. Однако, можно реализовать простую нейронную сеть с использованием базовых математических операций и структур данных.

Ниже приведен пример простой нейронной сети с одним скрытым слоем, которая обучается на небольшом наборе данных. Этот пример демонстрирует базовые принципы работы нейронных сетей.

; Инициализация параметров нейронной сети
Structure Neuron
  weights.f[2]
  bias.f
EndStructure

Structure Layer
  neurons.Neuron[2]
EndStructure

Global inputLayer.Layer
Global hiddenLayer.Layer
Global outputLayer.Neuron

; Инициализация весов и смещений случайными значениями
Procedure InitializeNetwork()
  For i = 0 To 1
    For j = 0 To 1
      inputLayer\\neurons[i]\\weights[j] = Random(100) / 100.0
    Next
    inputLayer\\neurons[i]\\bias = Random(100) / 100.0
  Next

  For i = 0 To 1
    For j = 0 To 1
      hiddenLayer\\neurons[i]\\weights[j] = Random(100) / 100.0
    Next
    hiddenLayer\\neurons[i]\\bias = Random(100) / 100.0
  Next

  For i = 0 To 1
    outputLayer\\weights[i] = Random(100) / 100.0
  Next
  outputLayer\\bias = Random(100) / 100.0
EndProcedure

; Функция активации (сигмоида)
Procedure.f Sigmoid(x.f)
  ProcedureReturn 1.0 / (1.0 + Pow(2.71828, -x))
EndProcedure

; Прямое распространение (forward propagation)
Procedure.f ForwardPropagation(input1.f, input2.f)
  Dim hiddenOutput.f(1)

  ; Вычисление выхода скрытого слоя
  For i = 0 To 1
    sum.f = inputLayer\\neurons[i]\\weights[0] * input1 + inputLayer\\neurons[i]\\weights[1] * input2 + inputLayer\\neurons[i]\\bias
    hiddenOutput(i) = Sigmoid(sum)
  Next

  ; Вычисление выхода выходного слоя
  sum.f = outputLayer\\weights[0] * hiddenOutput(0) + outputLayer\\weights[1] * hiddenOutput(1) + outputLayer\\bias
  ProcedureReturn Sigmoid(sum)
EndProcedure

; Обратное распространение (backpropagation)
Procedure BackPropagation(input1.f, input2.f, target.f, learningRate.f = 0.1)
  Dim hiddenOutput.f(1)
  Dim hiddenError.f(1)

  ; Прямое распространение
  For i = 0 To 1
    sum.f = inputLayer\\neurons[i]\\weights[0] * input1 + inputLayer\\neurons[i]\\weights[1] * input2 + inputLayer\\neurons[i]\\bias
    hiddenOutput(i) = Sigmoid(sum)
  Next

  output.f = outputLayer\\weights[0] * hiddenOutput(0) + outputLayer\\weights[1] * hiddenOutput(1) + outputLayer\\bias
  output = Sigmoid(output)

  ; Ошибка выходного слоя
  outputError.f = (target - output) * output * (1 - output)

  ; Ошибка скрытого слоя
  For i = 0 To 1
    hiddenError(i) = outputError * outputLayer\\weights[i] * hiddenOutput(i) * (1 - hiddenOutput(i))
  Next

  ; Обновление весов выходного слоя
  For i = 0 To 1
    outputLayer\\weights[i] + learningRate * outputError * hiddenOutput(i)
  Next
  outputLayer\\bias + learningRate * outputError

  ; Обновление весов скрытого слоя
  For i = 0 To 1
    For j = 0 To 1
      inputLayer\\neurons[i]\\weights[j] + learningRate * hiddenError(i) * IIf(j = 0, input1, input2)
    Next
    inputLayer\\neurons[i]\\bias + learningRate * hiddenError(i)
  Next
EndProcedure

; Обучение нейронной сети
Procedure TrainNetwork(epochs, learningRate.f)
  ; Пример данных для обучения (XOR)
  Dim inputs.f(3, 1)
  inputs(0, 0) = 0 : inputs(0, 1) = 0
  inputs(1, 0) = 0 : inputs(1, 1) = 1
  inputs(2, 0) = 1 : inputs(2, 1) = 0
  inputs(3, 0) = 1 : inputs(3, 1) = 1

  Dim targets.f(3)
  targets(0) = 0
  targets(1) = 1
  targets(2) = 1
  targets(3) = 0

  For epoch = 1 To epochs
    For i = 0 To 3
      BackPropagation(inputs(i, 0), inputs(i, 1), targets(i), learningRate)
    Next
  Next
EndProcedure

; Инициализация и обучение сети
InitializeNetwork()
TrainNetwork(10000, 0.1)

; Тестирование сети
Debug "0 XOR 0 = " + StrF(ForwardPropagation(0, 0))
Debug "0 XOR 1 = " + StrF(ForwardPropagation(0, 1))
Debug "1 XOR 0 = " + StrF(ForwardPropagation(1, 0))
Debug "1 XOR 1 = " + StrF(ForwardPropagation(1, 1))

Описание кода:

    Инициализация сети: Веса и смещения инициализируются случайными значениями.

    Прямое распространение: Входные данные проходят через скрытый слой и выходной слой, вычисляется выходное значение.

    Обратное распространение: Вычисляются ошибки и обновляются веса и смещения.

    Обучение: Нейронная сеть обучается на наборе данных XOR.

    Тестирование: После обучения сеть тестируется на всех возможных входных данных.

Примечания:

    Этот пример очень прост и предназначен для демонстрации основных принципов работы нейронных сетей.

    Для более сложных задач рекомендуется использовать специализированные библиотеки и языки, такие как Python с TensorFlow или PyTorch.

Этот код можно использовать как основу для более сложных экспериментов с нейронными сетями на PureBasic.

0

2

Отлаженный и исправленный мною вариант этой нейронной сети таков:

Код:
Structure Neuron
  weights.f[2]
  bias.f
EndStructure

Structure Layer
  neurons.Neuron[2]
EndStructure

Global inputLayer.Layer
Global hiddenLayer.Layer
Global outputLayer.Neuron

; Инициализация весов и смещений случайными значениями
Procedure InitializeNetwork()
  For i = 0 To 1
    For j = 0 To 1
      inputLayer\neurons[i]\weights[j] = Random(100) / 100.0
    Next
    inputLayer\neurons[i]\bias = Random(100) / 100.0
  Next

  For i = 0 To 1
    For j = 0 To 1
      hiddenLayer\neurons[i]\weights[j] = Random(100) / 100.0
    Next
    hiddenLayer\neurons[i]\bias = Random(100) / 100.0
  Next

  For i = 0 To 1
    outputLayer\weights[i] = Random(100) / 100.0
  Next
  outputLayer\bias = Random(100) / 100.0
EndProcedure

; Функция активации (сигмоида)
Procedure.f Sigmoid(x.f)
  ProcedureReturn 1.0 / (1.0 + Pow(2.71828, -x))
EndProcedure

; Прямое распространение (forward propagation)
Procedure.f ForwardPropagation(input1.f, input2.f)
  Dim hiddenOutput.f(1)

  ; Вычисление выхода скрытого слоя
  For i = 0 To 1
    sum.f = inputLayer\neurons[i]\weights[0] * input1 + inputLayer\neurons[i]\weights[1] * input2 + inputLayer\neurons[i]\bias
    hiddenOutput(i) = Sigmoid(sum)
  Next

  ; Вычисление выхода выходного слоя
  sum.f = outputLayer\weights[0] * hiddenOutput(0) + outputLayer\weights[1] * hiddenOutput(1) + outputLayer\bias
  ProcedureReturn Sigmoid(sum)
EndProcedure

; Обратное распространение (backpropagation)
Procedure BackPropagation(input1.f, input2.f, target.f, learningRate.f = 0.1)
  Dim hiddenOutput.f(1)
  Dim hiddenError.f(1)

  ; Прямое распространение
  For i = 0 To 1
    sum.f = inputLayer\neurons[i]\weights[0] * input1 + inputLayer\neurons[i]\weights[1] * input2 + inputLayer\neurons[i]\bias
    hiddenOutput(i) = Sigmoid(sum)
  Next

  output.f = outputLayer\weights[0] * hiddenOutput(0) + outputLayer\weights[1] * hiddenOutput(1) + outputLayer\bias
  output = Sigmoid(output)

  ; Ошибка выходного слоя
  outputError.f = (target - output) * output * (1 - output)

  ; Ошибка скрытого слоя
  For i = 0 To 1
    hiddenError(i) = outputError * outputLayer\weights[i] * hiddenOutput(i) * (1 - hiddenOutput(i))
  Next

  ; Обновление весов выходного слоя
  For i = 0 To 1
    outputLayer\weights[i] + learningRate * outputError * hiddenOutput(i)
  Next
  outputLayer\bias + learningRate * outputError

  ; Обновление весов скрытого слоя
  For i = 0 To 1
    For j = 0 To 1
      If j=0
        in.f  = input1
      Else
        in  = input2
        EndIf
      inputLayer\neurons[i]\weights[j] + learningRate * hiddenError(i) * in
    Next
    inputLayer\neurons[i]\bias + learningRate * hiddenError(i)
  Next
EndProcedure

; Обучение нейронной сети
Procedure TrainNetwork(epochs, learningRate.f)
  ; Пример данных для обучения (XOR)
  Dim inputs.f(3, 1)
  inputs(0, 0) = 0 : inputs(0, 1) = 0
  inputs(1, 0) = 0 : inputs(1, 1) = 1
  inputs(2, 0) = 1 : inputs(2, 1) = 0
  inputs(3, 0) = 1 : inputs(3, 1) = 1

  Dim targets.f(3)
  targets(0) = 0
  targets(1) = 1
  targets(2) = 1
  targets(3) = 0

  For epoch = 1 To epochs
    For i = 0 To 3
      BackPropagation(inputs(i, 0), inputs(i, 1), targets(i), learningRate)
    Next
  Next
EndProcedure

; Инициализация и обучение сети
InitializeNetwork()
TrainNetwork(10000, 0.1)

; Тестирование сети
Debug "0 XOR 0 = " + StrF(ForwardPropagation(0, 0))
Debug "0 XOR 1 = " + StrF(ForwardPropagation(0, 1))
Debug "1 XOR 0 = " + StrF(ForwardPropagation(1, 0))
Debug "1 XOR 1 = " + StrF(ForwardPropagation(1, 1))

0


Вы здесь » Результаты работы нейросетями » Остальное » Нейронная сеть на PureBasic'е