在下面的CNTK create_trainer处理程序(在python中)我试图理解这两个方程式的含义 - 我相信这是每个minibatch的学习率,但其余部分没有被微软评论。有没有人理解这些lr_per_mb方程及其意义?
lr_per_mb = [1.0] * 80 + [0.1] * 40 + [0.01]
lr_per_mb = [0.1] * 1 + [1.0] * 80 + [0.1] * 40 + [0.01]
def create_trainer(network,minibatch_size,epoch_size,num_quantization_bits,block_size,warm_up,progress_printer):
if network['name'] == 'resnet20':
lr_per_mb = [1.0]*80+[0.1]*40+[0.01]
elif network['name'] == 'resnet110':
lr_per_mb = [0.1]*1+[1.0]*80+[0.1]*40+[0.01]
else:
return RuntimeError("Unknown model name!")
答案 0 :(得分:1)
语法[a1] * b + [a1] * d + a3
表示,学习者将使用a1
的学习率进行首次b
次迭代(时期/样本:取决于您的训练师迭代设置),然后它将对a2
次迭代(时期或样本)使用d
的学习率,对于剩余的迭代,学习率应为a3
。
通常,您会从较高的学习率开始,随着培训的进行,人们会降低学习率。这就是您在上面的代码中看到的内容。此外,对于两个网络,学习率是不同的。在寻找学习率的正确参数方面付出了很多努力。因此,使用示例中的一些数字作为初始起点可能会节省大量时间。