【发布时间】:2018-04-23 00:22:26
【问题描述】:
我正在关注 this tutorial 以实现反向传播算法。但是,我一直在为这个算法实现动量。
没有动量,这是权重更新方法的代码:
def update_weights(network, row, l_rate):
for i in range(len(network)):
inputs = row[:-1]
if i != 0:
inputs = [neuron['output'] for neuron in network[i - 1]]
for neuron in network[i]:
for j in range(len(inputs)):
neuron['weights'][j] += l_rate * neuron['delta'] * inputs[j]
neuron['weights'][-1] += l_rate * neuron['delta']
下面是我的实现:
def updateWeights(network, row, l_rate, momentum=0.5):
for i in range(len(network)):
inputs = row[:-1]
if i != 0:
inputs = [neuron['output'] for neuron in network[i-1]]
for neuron in network[i]:
for j in range(len(inputs)):
previous_weight = neuron['weights'][j]
neuron['weights'][j] += l_rate * neuron['delta'] * inputs[j] + momentum * previous_weight
previous_weight = neuron['weights'][-1]
neuron['weights'][-1] += l_rate * neuron['delta'] + momentum * previous_weight
这给了我一个 Mathoverflow 错误,因为权重在多个时期内以指数方式变得太大。我相信我的 previous_weight 逻辑对于更新是错误的。
【问题讨论】:
标签: python algorithm neural-network backpropagation gradient-descent