🔍 Как написать нейросеть с нуля на питоне? Шаг за шагом руководство и примеры
import numpy as np
# Создание данных для обучения
X = np.array([[0, 0, 1],
[0, 1, 1],
[1, 0, 1],
[1, 1, 1]])
y = np.array([[0],
[1],
[1],
[0]])
# Инициализация весов
weights = 2 * np.random.random((3, 1)) - 1
# Определение функции активации
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# Прямое распространение
def forward_propagation(X, weights):
return sigmoid(np.dot(X, weights))
# Обратное распространение
def back_propagation(X, y, weights, learning_rate):
error = y - forward_propagation(X, weights)
delta = error * sigmoid(forward_propagation(X, weights)) * (1 - sigmoid(forward_propagation(X, weights)))
weights += learning_rate * np.dot(X.T, delta)
return weights
# Обучение нейросети
for i in range(10000):
weights = back_propagation(X, y, weights, 0.1)
# Пример использования обученной нейросети
new_data = np.array([1, 1, 0])
prediction = forward_propagation(new_data, weights)
print(f"Прогноз: {prediction[0]}")
Надеюсь, этот пример поможет вам начать с написанием нейросети с нуля на Питоне. Успехов в освоении мира глубокого обучения на питоне!
Детальный ответ
Привет! В этой статье мы рассмотрим, как написать нейронную сеть с нуля на Python. Нейронные сети - это мощный инструмент машинного обучения, который позволяет нам моделировать сложные функции и решать разнообразные задачи, включая классификацию, регрессию и генерацию текста.
Шаг 1: Импорт библиотек
import numpy as np
Первым шагом нам нужно импортировать библиотеку NumPy, которая предоставляет нам мощные инструменты для работы с массивами и матрицами в Python.
Шаг 2: Определение структуры нейронной сети
class NeuralNetwork:
def __init__(self, input_size, hidden_size, output_size):
self.W1 = np.random.randn(input_size, hidden_size)
self.W2 = np.random.randn(hidden_size, output_size)
Мы определяем класс NeuralNetwork с помощью метода __init__, который инициализирует веса наших нейронов случайными значениями.
Шаг 3: Функция прямого распространения
def forward(self, X):
self.z = np.dot(X, self.W1)
self.z2 = self.sigmoid(self.z)
self.z3 = np.dot(self.z2, self.W2)
y_hat = self.sigmoid(self.z3)
return y_hat
Функция forward принимает входные данные X и выполняет прямое распространение через нейронную сеть, умножая входные данные на веса и применяя активационную функцию сигмоиды.
Шаг 4: Функция обратного распространения ошибки
def backward(self, X, y, y_hat, learning_rate):
self.delta3 = (y_hat - y) * self.sigmoid_derivative(y_hat)
self.dJ_dW2 = np.dot(self.z2.T, self.delta3)
self.delta2 = np.dot(self.delta3, self.W2.T) * self.sigmoid_derivative(self.z2)
self.dJ_dW1 = np.dot(X.T, self.delta2)
self.W1 -= learning_rate * self.dJ_dW1
self.W2 -= learning_rate * self.dJ_dW2
Функция backward считает градиенты весов и обновляет их, используя градиентный спуск. Здесь мы используем ошибку между предсказанным значением и фактическим значением для расчета градиентов.
Шаг 5: Обучение нейронной сети
def train(self, X, y, epochs, learning_rate):
for i in range(epochs):
y_hat = self.forward(X)
self.backward(X, y, y_hat, learning_rate)
Метод train используется для обучения нейронной сети. Мы прогоняем данные через сеть, считаем ошибку и обновляем веса. Этот процесс повторяется заданное количество эпох.
Шаг 6: Применение нейронной сети
def predict(self, X):
return self.forward(X)
Метод predict используется для предсказания выходных значений на основе входных данных, после обучения нейронной сети.
Шаг 7: Пример использования
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([[0], [1], [1], [0]])
nn = NeuralNetwork(2, 3, 1)
nn.train(X, y, epochs=1000, learning_rate=0.1)
print(nn.predict(X))
В этом примере мы создаем нейронную сеть с двумя входами, тремя скрытыми нейронами и одним выходом. Затем мы обучаем ее на наборе данных XOR и выводим предсказанные значения на основе входных данных.
Заключение
Теперь у вас есть базовое представление о том, как написать нейронную сеть с нуля на Python. Мы рассмотрели основные шаги, включая импорт библиотек, определение структуры сети, прямое и обратное распространение ошибки, обучение и применение сети. Нейронные сети - это мощный инструмент, и изучение их реализации поможет вам лучше понять их работу.