Ошибка в нейросети

Я написал трёхслойную нейросеть со смещениями. У меня возникает ошибка при запуске нейросети. Она заключается в том, что в коде умножаются массивы с разным размером.

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)

Ответы (0 шт):