Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class NeuralNetwork:
- # инициализация
- def __init__(self, inputNodes, hiddenNodes, outputNodes, learningRate): # кол-во входных узлов, скрытых и выходных; коэффициент обучения
- self.iNodes = inputNodes
- self.hNodes = hiddenNodes
- self.oNodes = outputNodes
- self.wih = numpy.random.rand(self.hNodes, self.iNodes) - 0.5
- self.who = numpy.random.rand(self.oNodes, self.hNodes) - 0.5
- self.lr = learningRate
- self.activation = lambda x: scipy.special.expit(x)
- # тренировка
- def train(self, inputs_list, targets_list):
- # преобразование списка входных значений в двумерный массив
- inputs = numpy.array(inputs_list, ndmin = 2).T
- targets = numpy.array(targets_list, ndmin = 2).T
- # вычисления
- hidden_inputs = numpy.dot(self.wih, inputs)
- hidden_outputs = self.activation(hidden_inputs)
- final_inputs = numpy.dot(self.who, hidden_outputs)
- final_outputs = self.activation(final_inputs)
- # вычисление ошибок
- output_errors = targets - final_outputs
- hidden_errors = numpy.dot(self.who.T, output_errors)
- # обновление весовых коэффициентов
- self.who += self.lr * numpy.dot((output_errors * final_outputs * (1.0 - final_outputs)), hidden_outputs.T)
- self.wih += self.lr * numpy.dot((hidden_errors * hidden_outputs * (1.0 - hidden_outputs)), inputs.T)
- # запросы
- def query(self, inputs_list):
- # преобразование списка входных значений в двумерный массив
- inputs = numpy.array(inputs_list, ndmin = 2).T
- hidden_inputs = numpy.dot(self.wih, inputs)
- hidden_outputs = self.activation(hidden_inputs)
- final_inputs = numpy.dot(self.who, hidden_outputs)
- final_outputs = self.activation(final_inputs)
- return final_outputs
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement