Создание простой нейросети на Python
Введение
Нейронные сети - это основа многих современных технологий машинного обучения. Они вдохновлены структурой и функциями мозга и способны обучаться распознаванию сложных шаблонов в данных. В этой статье мы рассмотрим, как можно создать простую нейросеть на Python, которая способна обучаться на примерах и делать предсказания.
Основы нейросетей
Нейросеть состоит из слоёв нейронов, каждый из которых связан с другими нейронами следующего слоя. Эти связи имеют веса, которые в процессе обучения корректируются таким образом, чтобы нейросеть могла правильно выполнять задачу, например, классификацию изображений или предсказание временных рядов.
Простая нейросеть на Python
Для создания нейросети мы будем использовать библиотеку numpy, которая позволяет эффективно работать с массивами и матрицами - основными структурами данных при работе с нейросетями.
import numpy as np
# Сигмоидная функция активации def sigmoid(x):
return 1 / (1 + np.exp(-x))
# Производная сигмоидной функции def sigmoid_derivative(x):
return x * (1 - x)
# Инициализация параметров нейросети
input_layer_size = 3
# Количество входных нейронов
hidden_layer_size = 4
# Количество нейронов скрытого слоя
output_layer_size = 1
# Количество выходных нейронов
# Веса
weights_input_hidden = np.random.uniform(size=(input_layer_size, hidden_layer_size))
weights_hidden_output = np.random.uniform(size=(hidden_layer_size, output_layer_size))
# Обучение нейросети
def train(inputs, expected_output, iterations):
for iteration in range(iterations):
# Прямое распространение
input_hidden = np.dot(inputs, weights_input_hidden)
output_hidden = sigmoid(input_hidden)
input_final = np.dot(output_hidden, weights_hidden_output)
output_final = sigmoid(input_final)
# Обратное распространение
error = expected_output - output_final
d_output = error * sigmoid_derivative(output_final)
error_hidden = d_output.dot(weights_hidden_output.T)
d_hidden_layer = error_hidden * sigmoid_derivative(output_hidden)
# Корректировка весов
weights_hidden_output += output_hidden.T.dot(d_output)
weights_input_hidden += inputs.T.dot(d_hidden_layer)
# Тестирование нейросети
def predict(inputs):
input_hidden = np.dot(inputs, weights_input_hidden)
output_hidden = sigmoid(input_hidden)
input_final = np.dot(output_hidden, weights_hidden_output)
output_final = sigmoid(input_final)
return output_final
# Пример использования
inputs = np.array([[0, 1, 1], [1, 0, 0], [1, 1, 0]])
expected_output = np.array([[1], [0], [1]])
train(inputs, expected_output, 10000)
print(predict(np.array([1, 0, 1])))
Заключение.
Приведенный выше код демонстрирует базовую структуру нейросети, состоящей из входного слоя, одного скрытого слоя и выходного слоя. Функция активации сигмоид используется для нормализации выходных значений нейронов. Процесс обучения включает в себя прямое и обратное распространение, в ходе которого корректируются веса связей. Это лишь пример простейшей нейросети, и в реальных задачах машинного обучения используются более сложные архитектуры и методы.
Это базовый пример статьи, который можно расширить, добавив больше информации о теории нейросетей, различных типах архитектур и примерах их применения. Надеюсь, это поможет вам начать работу с нейросетями на Python!