Нейронная сеть на Python

На примере простой нейронной сети на Python мы рассмотрим процесс обучения и применения. Наша нейронная сеть будет иметь один входной слой, один скрытый слой и один выходной слой. На входном слое будет два нейрона, на скрытом слое будет три нейрона, а на выходном слое будет один нейрон.

Для начала нам нужно импортировать необходимые библиотеки. Для этого мы будем использовать NumPy для матричных вычислений и Matplotlib для визуализации наших результатов.

#
import numpy as np
import matplotlib.pyplot as plt
#

Теперь нам нужно инициализировать наши веса и смещения. Мы будем использовать случайные значения для наших весов и смещений.

# Инициализация весов и смещений
w1 = np.random.randn(2, 3)
b1 = np.random.randn(3)
w2 = np.random.randn(3, 1)
b2 = np.random.randn(1)
#

Теперь мы можем написать функцию активации, которая будет использоваться для преобразования входных данных в выходные данные. Здесь мы будем использовать сигмоидную функцию активации.

# Функция активации
def sigmoid(x):
    return 1 / (1 + np.exp(-x))
#

Теперь мы можем написать функцию для прямого распространения. Эта функция будет принимать на вход входные данные и веса и возвращать выходные данные.

# Функция прямого распространения
def forward_prop(x, w1, b1, w2, b2):
    z1 = np.dot(x, w1) + b1
    a1 = sigmoid(z1)
    z2 = np.dot(a1, w2) + b2
    a2 = sigmoid(z2)
    return a2
#

Теперь мы можем написать функцию для обратного распространения. Эта функция будет принимать на вход входные данные, веса, выходные данные и ответы и возвращать градиенты для весов и смещений.

# Функция обратного распространения
def backward_prop(x, y, w1, b1, w2, b2):
    z1 = np.dot(x, w1) + b1
    a1 = sigmoid(z1)
    z2 = np.dot(a1, w2) + b2
    a2 = sigmoid(z2)
    delta2 = (a2 - y) * a2 * (1 - a2)
    delta1 = np.dot(delta2, w2.T) * a1 * (1 - a1)
    dw2 = np.dot(a1.T, delta2)
    db2 = np.sum(delta2, axis=0)
    dw1 = np.dot(x.T, delta1)
    db1 = np.sum(delta1, axis=0)
    return dw1, db1, dw2, db2
#

Теперь мы можем написать функцию для обучения нашей нейронной сети. Эта функция будет принимать на вход входные данные, выходные данные и параметры обучения и возвращать обученные веса и смещения.

# Функция обучения
def train(x, y, w1, b1, w2, b2, epochs, learning_rate):
    for i in range(epochs):
        a2 = forward_prop(x, w1, b1, w2, b2)
        dw1, db1, dw2, db2 = backward_prop(x, y, w1, b1, w2, b2)
        w1 -= learning_rate * dw1
        b1 -= learning_rate * db1
        w2 -= learning_rate * dw2
        b2 -= learning_rate * db2
    return w1, b1, w2, b2
#

Теперь мы можем использовать эту функцию для обучения нашей нейронной сети. Для этого мы будем использовать набор данных XOR.

# Данные XOR
x = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([[0], [1], [1], [0]])
# Обучение нейронной сети
w1, b1, w2, b2 = train(x, y, w1, b1, w2, b2, 1000, 0.1)
#

Теперь мы можем использовать обученную нейронную сеть для предсказания выходных данных для новых входных данных.

# Предсказание на новых данных
x_test = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y_test = forward_prop(x_test, w1, b1, w2, b2)
# Визуализация результатов
plt.plot(x_test, y_test, 'o')
plt.show()
#

В результате мы получили график, показывающий, как наша нейронная сеть предсказывает выходные данные для новых входных данных.

Оцените статью
( Пока оценок нет )
Поделиться с друзьями
Python для начинающих
guest
Комментарии откл.
 Купить/арендовать этот сайт!