如何修复构建神经网络的以下错误?

时间:2017-04-20 23:27:32

标签: python-3.x machine-learning neural-network

您好我正在更新以下功能:

def train(self, features, targets):

我的想法是让我的在线课程的todo我试过这个:

# TODO: Output error - Replace this value with your calculations.
            error = y - final_outputs # Output layer error is the difference between desired target and actual output.

            # TODO: Backpropagated error terms - Replace these values with your calculations.
            output_error_term = error * final_outputs * (1 - final_outputs)

            # TODO: Calculate the hidden layer's contribution to the error
            hidden_error = np.dot(output_error_term, self.weights_hidden_to_output)

            # TODO: Backpropagated error terms - Replace these values with your calculations.      
            hidden_error_term = hidden_error * hidden_outputs * (1 - hidden_outputs)

然而我得到了:

..FFE
======================================================================
ERROR: test_train (__main__.TestMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "<ipython-input-11-90579d706c92>", line 41, in test_train
    network.train(inputs, targets)
  File "<ipython-input-9-596e703ab9b6>", line 65, in train
    hidden_error = np.dot(output_error_term, self.weights_hidden_to_output)
ValueError: shapes (1,) and (2,1) not aligned: 1 (dim 0) != 2 (dim 0)

======================================================================
FAIL: test_data_path (__main__.TestMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "<ipython-input-11-90579d706c92>", line 20, in test_data_path
    self.assertTrue(data_path.lower() == 'bike-sharing-dataset/hour.csv')
AssertionError: False is not true

======================================================================
FAIL: test_run (__main__.TestMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "<ipython-input-11-90579d706c92>", line 56, in test_run
    self.assertTrue(np.allclose(network.run(inputs), 0.09998924))
AssertionError: False is not true

----------------------------------------------------------------------
Ran 5 tests in 0.005s

FAILED (failures=2, errors=1)

这是完整的代码,我下载了ipython的笔记本来显示我的完整代码:

https://gist.github.com/anonymous/e7a816ef0526d41fbdb63a0aa6c27712

非常感谢支持克服这个问题,非常感谢您的支持。

这是数据: https://gist.github.com/anonymous/31340c38a3fd8e175bf0054c7c005d2b

非常感谢你的支持。

1 个答案:

答案 0 :(得分:1)

有关

hidden_error = np.dot(output_error_term, self.weights_hidden_to_output)

记住点积需要第一个操作数的列数与第二个操作数的行数相匹配。你有  (1,1)X(2,1) 因此第二个操作数的行数应为1,这意味着您需要:

(1,1)X(1,2)

这意味着您需要转置第二个操作数,请尝试:

hidden_error = np.dot(output_error_term, self.weights_hidden_to_output.T)

但我认为在修复此错误后,由于形状不一致,您会发现类似的错误。操纵您的操作数以匹配第一个列,第二个列中的行。