Необычное поведение формы в NumPy - PullRequest
0 голосов
/ 19 января 2019

Я пытался закодировать двухслойный NN в numpy. Находясь на нем, я обнаружил это странное поведение в том, как матрица w0 меняет свою форму при входе в цикл. Форма для w0 равна (3,1), а для X это (4,3). Результат должен быть (4,1), но вместо этого, когда программа входит в цикл, w0 становится (4,4). Вне цикла, это работает просто отлично. Кроме того, это происходит, когда я использую np.dot(X,w0), но прекрасно работает, когда я использую np.dot(w0.T,X.T). Вот код:

def sigmoid(x, deriv=False):
    if deriv == True:
        return x*(1-x)
    return 1/(1+np.exp(-x))

    X = np.array([[0,0,1],
              [0,1,1],
              [1,0,1],
              [1,1,1]])

    y = np.array([0,0,1,1]).T

    w0 = np.random.normal(0,0.1,(3,1))
    w0.shape


    for iter in range(10000):
      #forward propagation
      #l0 = X
      multiply = np.dot(X,w0)
      if iter == 1: print(multiply.shape)


      l1 = sigmoid(multiply)
      if iter == 1:
          print(w0)
          print(multiply.shape)
          print(X.shape)
          print(w0.shape)
          print(l1.shape)

      #Calculating error:
      error = y-l1
      if iter == 1: print(error.shape)

      #Backpropagating for update
      d_l1 = error*sigmoid(l1, True)
      if iter == 1: print(d_l1.shape)

      #Update weights : Shape -- (4*3).T * (4*1) = (3*1)
      w0 = w0 + np.dot(np.transpose(X), d_l1.T) 

print ('Results after training:')
print (l1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...