【发布时间】:2020-08-30 11:42:12
【问题描述】:
我有一个如下的设置,其中我有一个迭代迭代的外部 for 循环,以及一个迭代批次的内部 for 循环。
在内部 for 循环中,分批使用交叉熵损失,并使用具有一定学习率的 Adam 优化器。
在内部 for 循环之后(在评估所有批次之后),然后我根据输出计算另一个损失函数(自定义损失函数),并进行优化。
但是,我注意到,当我定义具有不同学习率的不同优化器时,它似乎并没有在训练。当我保持相同的优化器时,事情似乎发生了变化,但是当我替换它时,它没有。示例如下:
net = <my defined model, from another function>
optimizer_1 = torch.optim.Adam(net.parameters(), lr=0.1)
optimizer_2 = torch.optim.Adam(net.parameters(), lr=0.01)
for epoch in range(num_epochs):
for data in training_data: # these are the batches
<get output here>
loss1 = <compute loss function>
optimizer_1.zero_grad()
loss1.backward()
optimizer_1.step()
loss2 = <compute a different loss function here>
optimizer_2.zero_grad() #use a second optimizer with a different learning rate
loss.backward()
loss.step()
当我这样做时,似乎它实际上并没有对第二个损失函数进行第二次优化。为什么是这样?我希望第二个优化具有与第一个不同的学习率。然而,似乎只继续使用第一个优化器,optimizer_1,其各自的学习率似乎有效。
【问题讨论】:
标签: python machine-learning deep-learning pytorch