Ошибка в нейросети
Я написал трёхслойную нейросеть со смещениями. У меня возникает ошибка при запуске нейросети. Она заключается в том, что в коде умножаются массивы с разным размером.
import numpy as np
np.set_printoptions(suppress=True)
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def sigmoid_deriv(x):
return (1 - x) * x
def ReLU(z):
return np.maximum(0, z)
def ReLU_deriv(s):
return 1 * (s > 0)
X = np.array([
[0,0],
[1,0],
[0,1],
[1,1]
])
y = np.array([[1],[0],[0],[1]])
w0_bias = np.random.random((3,2))
w1_bias = np.random.random((3,2))
w2_bias = np.random.random((3,1))
etha = 0.01
for _ in range(100000):
for x_i, y_i in zip(X,y):
x_i_bias = np.append(x_i, [1]).reshape(-1,1)
x_i = x_i.reshape(-1,1)
y_i = y_i.reshape(-1,1)
w1 = np.delete(w1_bias, [-1], axis = 0).reshape(-2,2)
w2 = np.delete(w2_bias, [-1], axis = 0).reshape(-1,1)
layer1 = sigmoid(w0_bias.T.dot(x_i_bias))
layer1_bias = np.append(layer1, [1]).reshape(-1,1)
layer2 = sigmoid(w1_bias.T.dot(layer1_bias))
layer2_bias = np.append(layer2, [1]).reshape(-1,1)
layer3 = sigmoid(w2_bias.T.dot(layer1_bias))
delta3 = (y_i - layer3) * ReLU_deriv(layer3)
delta2 = delta3 * w2 * sigmoid_deriv(layer2)
delta1 = (delta2 * w1 * sigmoid_deriv(layer1)).reshape(-1,1)
w0_bias += etha * (delta1.T * x_i_bias)
w1_bias += etha * (delta2.T * layer1_bias)
w2_bias += etha * (delta3 * layer1_bias)