Advertisement
Guest User

Untitled

a guest
Nov 15th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.20 KB | None | 0 0
  1. import numpy as np
  2.  
  3.  
  4. class NeuralNetwork():
  5.  
  6.     def __init__(self):
  7.         # для генерации случайных чисел
  8.         np.random.seed(1)
  9.  
  10.         # преобразование весов в матрицу 3 на 1 со значениями от -1 до 1 и среднее значение 0
  11.         self.synaptic_weights = 2 * np.random.random((3, 1)) - 1
  12.  
  13.     def sigmoid(self, x):
  14.         # применение сигмоидной функции
  15.         return 1 / (1 + np.exp(-x))
  16.  
  17.     def sigmoid_derivative(self, x):
  18.         # вычисление производной по сигмоидной функции
  19.         return x * (1 - x)
  20.  
  21.     def train(self, training_inputs, training_outputs, training_iterations):
  22.         # обучение модели для точных предсказаний при постоянном регулировании весов
  23.         for iteration in range(training_iterations):
  24.             #получаем данные обучения через нейрон
  25.             output = self.think(training_inputs)
  26.  
  27.             # вычислительная частота ошибок для обратного распространения
  28.             error = training_outputs - output
  29.  
  30.             # корректировка веса
  31.             adjustments = np.dot(training_inputs.T, error * self.sigmoid_derivative(output))
  32.  
  33.             self.synaptic_weights += adjustments
  34.  
  35.     def think(self, inputs):
  36.         # передача входов через нейрон для получения вывода
  37.         # преобразование значений в floats
  38.  
  39.         inputs = inputs.astype(float)
  40.         output = self.sigmoid(np.dot(inputs, self.synaptic_weights))
  41.         return output
  42.  
  43.  
  44. if __name__ == "__main__":
  45.     # инициализация класса нейронов
  46.     neural_network = NeuralNetwork()
  47.  
  48.     print("Начало произвольно сгенерированных весов:")
  49.     print(neural_network.synaptic_weights)
  50.  
  51.     # учебные данные, состоящие из 4 примеров - 3 входных значения и 1 выход
  52.     training_inputs = np.array([[0, 0, 1],
  53.                                 [1, 1, 1],
  54.                                 [1, 0, 1],
  55.                                 [0, 1, 1]])
  56.  
  57.     training_outputs = np.array([[0, 1, 1, 0]]).T
  58.  
  59.     # тренировка проходит
  60.     neural_network.train(training_inputs, training_outputs, 15000)
  61.  
  62.     print("Окончание весов после обучения: ")
  63.     print(neural_network.synaptic_weights)
  64.  
  65.     user_input_one = str(input("Пользовательский ввод один:"))
  66.     user_input_two = str(input("Пользовательский ввод два:"))
  67.     user_input_three = str(input("Пользовательский ввод три:"))
  68.  
  69.     print("Учитывая новую ситуацию:", user_input_one, user_input_two, user_input_three)
  70.     print("Новые выходные данные:")
  71.     print(neural_network.think(np.array([user_input_one, user_input_two, user_input_three])))
  72.     print("Вау, мы сделали это!")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement