Googolxx/STF

疑问

Closed this issue · 9 comments

训练细节问题,为了修改学习率,怎么停止训练,怎么继续训练?是需要手动吗?
谢谢博主!

我一般是手动修改学习率,先是用1e-4的学习率,大概到100w [iteration左右,loss基本不再继续下降的时候,降低学习率到1e-5训练到收敛。你可以通过代码实现修改学习率的策略,也可以直接中断程序,设置新的学习率,加载checkpoint继续训练(这个参数)。

首先谢谢博主哈!如果用你的代码,手动修改的话,先是1e-4,然后训练大概100w iteration发现loss不再下降,然后直接将learning rate改成1e-5,模型会接着100w iteration的模型训练吗?还是直接从1e-5这个学习率直接从epoch 0 从头开始?

你给checkpoint这个参数赋值,也就是你保存的迭代了100w次checkpont的路径。1e-5这个学习率是接着之前的epoch继续训。

谢谢博主!你就是灯塔!!!

博主您好,想问下博主,训练的average losses:loss: MSEloss: Bpp loss : Aux loss:值大概为多少是比较好的效果呀。这几个值 mse loss是越高越好,bpp loss越低越好。average losses:loss越低越好,(这个loss是总的loss吗),那么用于多目标任务优化的辅助损失Aux loss是越高越好还是越低越好呀,翻了论文和代码都没有看出来。
训练完的checkpoint怎么看best loss时对应的epoch是多少呀?

loss都是越低越好。具体到哪个值比较好,这个取决于lambda 的设置,可以通过在数据集上的evaluation结果(比如得到psnr和bpp值),在RD曲线上对比其他方法来查看效果好不好。
不用太在意aux loss的值,它并不会直接影响模型的性能,aux loss值的浮动也是正常的。
查看best loss对应的epoch,可以在保存checkpoint的文件时在命名时赋予上对应的epoch值即可。可以加几行代码就可以实现。

好滴谢谢您!

博主您好,打扰了十分抱歉,有一个问题向您请教一下。

在训练模型时,对于cnn.py文件运行的是它里面的def forward()函数,在forward()函数中里面使用set_round(),即"torch.round(x) - x.detach() + x" 对潜在表示y和z进行模拟量化;那么在测试模型时,对于cnn.py文件运行的仍然是它里面的def forward()函数对吗?,在forward()函数中里面仍然使用set_round(),即"torch.round(x) - x.detach() + x" 对潜在表示y和z进行模拟量化吗?

那这样与一些现存论文中训练阶段采用添加噪声进行量化,测试阶段使用round()函数进行量化有什么区别吗?

非常期待您的回复,万分感谢。

1.训练模型运行的是forward()函数,测试模型运行的是compress()和decompress()函数,也是round量化而不是加噪声。
2.关于这个模拟量化的问题,在forward中是用带有梯度的round量化,也就是"torch.round(x) - x.detach() + x";在entropy model中是用噪声来模拟。至于为什么要这么做,Channel-wise(特别是第4章节)中通过很多实验说明了为什么采取这种方案。
3.与现存论文中训练加噪声模拟量化的区别。我个人理解主要的区别在于是否存在lrp这个模块,因为存在lrp这个弥补量化残差的模块,如果直接加噪声,这个模块是学不到任何东西的,因为噪声没有规律;但通过round量化,lrp模块可能能找到一些数据分布规律,让补偿残差“有迹可循”,起到一些作用。