Código
import numpy as np class NeuralNetwork: def __init__(self): self.W1 = np.random.randn(2, 3) self.W2 = np.random.randn(3, 1) def sigmoid(self, x): return 1 / (1 + np.exp(-x)) def sigmoid_deriv(self, x): return x * (1 - x) def mse(self, O, P): x = (P - O) ** 2 x = np.mean(x) y = P - O return (x, y) def forward(self, I): self.Z1 = I @ self.W1 self.A1 = self.sigmoid(self.Z1) self.Z2 = self.A1 @ self.W2 self.A2 = self.sigmoid(self.Z2) return self.A2 def backward(self, P, I, O): error = self.A2 - P D = [error * self.sigmoid_deriv(self.A2)] delta = np.random.randn(2, 3) D.append(delta) self.W2 = self.W2 + (-0.01 * self.A2.T.dot(D[0])) self.W1 = self.W1 + (-0.01 * self.A1.T.dot(D[1])) def train(self, I, P): O = self.forward(I) self.backward(P, I, O) if __name__ == '__main__': NN = NeuralNetwork() I = np.array([[0, 1]]) P = np.array([[1]]) for i in range(1): NN.train(I, P) exit()
Cuando quiero calcular delta de W1, obtengo un error de dimensiones.
¿Que estoy haciendo mal?
Gracias de antemano por cualquier ayuda.