烤宽面条中的学习率衰减

时间:2016-05-30 16:28:59

标签: python theano deep-learning lasagne

我正在使用nesterov动量来更新卷积神经网络的权重。我正在使用烤宽面条来建立CNN。如何实现每个时代的学习率衰减?

prediction = lasagne.layers.get_output(network)
loss = lasagne.objectives.categorical_crossentropy(prediction, target_var)
params = lasagne.layers.get_all_params(network, trainable=True)
lasagne.updates.nesterov_momentum(loss, params, learning_rate, momentum=0.9)
train_fn = theano.function([input_var_1, input_var_2, target_var], loss, updates=updates)

2 个答案:

答案 0 :(得分:3)

将学习率定义为图元素

...
learning_rate = T.scalar(name='learning_rate')
updates = lasagne.updates.nesterov_momentum(loss, params, learning_rate, momentum=0.9)
...

将您的学习率节点添加到train_fn

train_fn = theano.function([input_var_1, input_var_2, target_var, learning_rate], loss, updates=updates)

现在您可以调整学习率,例如:

base_lr = 1e-4
lr_decay = 0.8

for epoch in range(epochs):
    lr = base_lr * (lr_decay ** epoch)
    loss, updates = train_fn(input_1, input_2, target, lr)

答案 1 :(得分:0)

我认为你错过了一些东西:

prediction = lasagne.layers.get_output(network)
loss = lasagne.objectives.categorical_crossentropy(prediction, target_var)
params = lasagne.layers.get_all_params(network, trainable=True)
updates = lasagne.updates.nesterov_momentum(loss, params, learning_rate, momentum=0.9)
train_fn = theano.function([input_var_1, input_var_2, target_var], loss, updates=updates)