我有这个功能来更新我的mlp为sin函数的权重
它适用于xor没有问题,但我无法弄清楚为什么它不会因为我的罪在那里同样的方式,但我一直在
错误:
unsupported operand type(s) for *: 'float' and 'builtin_function_or_method'
def update_weights(self, learning_rate):
self.weights1 = np.add(self.weights1, learning_rate * self.delta_weights1)
self.weights2 = np.add(self.weights2, learning_rate * self.delta_weights2)
self.delta_weights1 = np.array
self.delta_weights2 = np.array
有人能指出我正确的方向吗?
答案 0 :(得分:1)
问题来自以下几点:
self.delta_weights1 = np.array
self.delta_weights2 = np.array
self.delta_weights1
将被分配函数(或函数指针)np.array
而不调用它。
如果您这样做:
type(np.array)
你会得到:
<type 'builtin_function_or_method'>
如果你调用函数(即添加括号),这需要一个对象转换为数组:
type(np.array([]))
你会得到:
<type 'numpy.ndarray'>
如果您想在更新权重后将delta_weights
变量重置为零(例如,在累积下一个小批量的贡献之前),请使用以下内容:
self.delta_weights1 = np.zeros(self.weights1.shape)
self.delta_weights2 = np.zeros(self.weights2.shape)
(另请参阅np.zeros()文档)。