Нейронная сеть предсказывающая исход математического выражения , не зная точной формулы
29 февраля 202029 фев 2020
13
Давайте создадим программу на Python, которая научит компьютер предсказывать вывод математического выражения, не зная точной формулы. Мы будем кодировать его с нуля, без использования каких-либо специальных библиотек. Единственный модуль Python, который мы будем использовать для экономии времени, это numpy, который включает некоторые методы умножения матриц и другие полезности. Рассмотрим a и b как входные данные. Выход рассчитывается по следующей формуле: (a + b) * 2 Во-первых, нам нужно смоделировать наш нейрон. Он должен иметь два входа и один выход. Наша нейронная сеть будет классом, имеющим весовые коэффициенты для каждого входа, а также методы обучения и анализа, которые будут использоваться для обучения сети на входах / выходах обучения и прогнозирования выходных данных на пользовательских входах. Это структура нашего класса:class neural_network: def __init__(self): random.seed(1) self.weights = 2 * random.random((2, 1)) - 1 def train(self, inputs, outputs, num): def think(self, inputs):Мы назначаем случайные числа от 0 до 1 в качестве начальных весов в нашем конструкторе. Метод Think вычисляет взвешенную сумму по следующей формуле: output = weight1 * input1 + weight2 * input2. Мы будем использовать точечный метод, чтобы вычислить, что:def think(self, inputs): return (dot(inputs, self.weights))Метод train принимает входные и соответствующие выходы и обучает сеть num раз. Во время каждой итерации мы рассчитываем результат, используя наш метод мышления, вычисляем ошибку и корректируем веса, используя следующую формулу: adjustment = 0,01 * error * outputdef train(self, inputs, outputs, num): for iteration in range(num): output = self.think(inputs) error = outputs - output adjustment = 0.01*dot(inputs.T, error) self.weights += adjustment.T - транспонирование матрицы - она перемещает матрицу из горизонтальной в вертикальную. Теперь мы готовы обучить нашу сеть на некоторых входах и попросить ее вывести результат на пользовательский ввод.neural_network = neural_network()inputs = array([[2, 3], [1, 1], [5, 2], [12, 3]])outputs = array([[10, 4, 14, 30]]).Tneural_network.train(inputs, outputs, 10000)print(neural_network.think(array([15, 2])))Приведенный выше код определяет обучающий набор входов и соответствующих выходов, обучает нейронную сеть 10000 раз и затем просит его вывести на вход 15, 2.
Давайте создадим программу на Python, которая научит компьютер предсказывать вывод математического выражения, не зная точной формулы. Мы будем кодировать его с нуля, без использования каких-либо специальных библиотек. Единственный модуль Python, который мы будем использовать для экономии времени, это numpy, который включает некоторые методы умножения матриц и другие полезности. Рассмотрим a и b как входные данные. Выход рассчитывается по следующей формуле: (a + b) * 2 Во-первых, нам нужно смоделировать наш нейрон. Он должен иметь два входа и один выход. Наша нейронная сеть будет классом, имеющим весовые коэффициенты для каждого входа, а также методы обучения и анализа, которые будут использоваться для обучения сети на входах / выходах обучения и прогнозирования выходных данных на пользовательских входах. Это структура нашего класса:class neural_network: def __init__(self): random.seed(1) self.weights = 2 * random.random((2, 1)) - 1 def train(self, inputs, outputs, num): def think(self, inputs):Мы назначаем случайные числа от 0 до 1 в качестве начальных весов в нашем конструкторе. Метод Think вычисляет взвешенную сумму по следующей формуле: output = weight1 * input1 + weight2 * input2. Мы будем использовать точечный метод, чтобы вычислить, что:def think(self, inputs): return (dot(inputs, self.weights))Метод train принимает входные и соответствующие выходы и обучает сеть num раз. Во время каждой итерации мы рассчитываем результат, используя наш метод мышления, вычисляем ошибку и корректируем веса, используя следующую формулу: adjustment = 0,01 * error * outputdef train(self, inputs, outputs, num): for iteration in range(num): output = self.think(inputs) error = outputs - output adjustment = 0.01*dot(inputs.T, error) self.weights += adjustment.T - транспонирование матрицы - она перемещает матрицу из горизонтальной в вертикальную. Теперь мы готовы обучить нашу сеть на некоторых входах и попросить ее вывести результат на пользовательский ввод.neural_network = neural_network()inputs = array([[2, 3], [1, 1], [5, 2], [12, 3]])outputs = array([[10, 4, 14, 30]]).Tneural_network.train(inputs, outputs, 10000)print(neural_network.think(array([15, 2])))Приведенный выше код определяет обучающий набор входов и соответствующих выходов, обучает нейронную сеть 10000 раз и затем просит его вывести на вход 15, 2.