【问题标题】:What does Tensorflow's CyclicalLearningRate scale_fn argument mean?Tensorflow 的 CyclicalLearningRate scale_fn 参数是什么意思?
【发布时间】:2021-05-23 06:51:01
【问题描述】:
在 tensorflow 的 CyclicalLearningRate 的文档中,有一个名为 scale_fn 的参数。
根据文档,scale_fn 是
一个函数。循环中应用的调度函数
但是这个解释不是很清楚。
这个函数接受什么参数,它应该输出什么?
更具体地说,如何使用它?
使用CyclicalLearningRate 需要它,但我找不到关于如何使用它的全面说明。
【问题讨论】:
标签:
python
tensorflow
machine-learning
deep-learning
【解决方案1】:
你是对的,documentation 在它的使用上并不是很有启发性。可以在Super Convergence with Cyclical Learning Rates in TensorFlow 中找到更好的解释和示例;引用:
from tensorflow_addons.optimizers import CyclicalLearningRate
cyclical_learning_rate = CyclicalLearningRate(
initial_learning_rate=3e-7, maximal_learning_rate=3e-5,
step_size=2360, scale_fn=lambda x: 1 / (2.0 ** (x - 1)),
scale_mode='cycle')
缩放功能
Scale 函数是控制从
初始学习率到最大学习率并返回
初始学习率。在 [Smith 的] 论文中,这是三角形之一,
三角形 2 或指数范围。在我自己的模型实验中
对于生成图像(例如超分辨率),我发现
三角形 2 最有效。
三角形:没有幅度缩放的基本三角形循环:
lambda x: 1.0
三角形 2:缩放初始幅度的基本三角形循环
每个周期减半:
lambda x: 1 / (2.0 ** (x — 1))
指数范围:将初始幅度按 gamma 比例缩放到
每个循环的循环迭代的功率:
lambda x: gamma ** x
还有FWIW,作者也指出:
我认为,这些参数可能缺乏明确性是 TensorFlow 学习率计划没有得到广泛使用的原因之一。