Создание нейронной сети для определения гейта XOR - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь создать простую нейронную сеть, которая определяет ворота XOR в Python для моего назначения класса, но я продолжаю получать ошибку. Ниже приведен мой код и соответствующая ошибка:

logic_inputs = np.array(logic_inputs)
logic_inputs

class Layer():

    def __init__(self, W, b):
        self.m = W.shape[0]
        self.n = W.shape[1]
        self.W = W
        self.b = b

   def activate(self, X):
       z = np.dot(X, self.W) + self.b
       return sigmoid(z)

W1 = np.array([[20], 
               [20]])

b1 = np.array([[-30]])

W2 = np.array([[-20], 
               [-20]])

b2 = np.array([[10]])

hidden_layer = Layer(W1, b1)
output_layer = Layer(W2, b2)

class Network():

   def __init__(self, hidden, output):
      self.hidden = hidden
      self.output = output

   def activate(self, X):
      z = self.hidden.activate(X)

      return self.output.activate(z)

xor_gate = Network(hidden_layer, output_layer)

xor_output = xor_gate.activate(X)
np.round(xor_output)

Ошибка

ValueError                                Traceback (most recent call last)
<ipython-input-83-84793a680685> in <module>
     40 xor_gate = Network(hidden_layer, output_layer)
     41 
---> 42 xor_output = xor_gate.activate(X)
     43 np.round(xor_output)

<ipython-input-83-84793a680685> in activate(self, X)
     36     z = self.hidden.activate(X)
     37 
---> 38     return self.output.activate(z)
     39 
     40 xor_gate = Network(hidden_layer, output_layer)

<ipython-input-83-84793a680685> in activate(self, X)
     11 
     12   def activate(self, X):
---> 13     z = np.dot(X, self.W) + self.b
     14     return sigmoid(z)
     15 

<__array_function__ internals> in dot(*args, **kwargs)

ValueError: shapes (4,1) and (2,1) not aligned: 1 (dim 1) != 2 (dim 0)

1 Ответ

0 голосов
/ 20 января 2020

Вы пытаетесь вычислить скалярное произведение между двумя матрицами с формами (4,1) и (2,1), что невозможно. Точечный продукт может быть рассчитан только в том случае, если форма матриц следующая: (a, n), (n, b), которая дает матрицу формы (a, b). Вы должны инициализировать ваши веса, чтобы иметь форму (1, 2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...