在学习课程的Jupyter笔记本时,运行某些代码行时遇到了错误。我知道cnn_learner
这一行没有任何错误,问题出在lr_find()
部分。看起来learn.lr_find()
并不想返回两个值!尽管它的文档说明它会返回一个元组。这就是我的问题所在。
以下是相关代码行:
learn = cnn_learner(dls, resnet34, metrics=error_rate)lr_min,lr_steep = learn.lr_find()
错误信息如下:
not enough values to unpack (expected 2, got 1)
针对第二行代码。
此外,我得到了一个带有一个“标记”的图表,我猜这是lr_min
或lr_steep
的值之一这是图表
当我仅运行learn.lr_find()
,即不捕获输出到lr_min, lr_steep
时,它运行得很好,但这样我就得不到最小和陡峭的学习率(这对我来说非常重要)
我阅读了lr_find
的功能说明,很明显它会返回一个元组。它的文档字符串中说
启动一个模拟训练以找到一个好的学习率,并根据
suggest_funcs
返回建议,作为一个命名的元组
我复制了原始笔记本,当我遇到这个错误时,我运行了原始笔记本,结果相同。我也更新了笔记本,但没有变化!无论我在网上搜索哪里,都没有出现任何形式的错误。我找到的唯一相关信息是lr_find()
在每次运行后返回不同的学习率结果,这是完全正常的。
回答:
我遇到了同样的问题,我发现lr_find()
的输出已经更新。你可以将第二行替换为lrs = learn.lr_find(suggest_funcs=(minimum, steep, valley, slide))
,然后你只需将使用lr_min
和lr_steep
的地方分别替换为lrs.minimum
和lrs.steep
,这样应该可以正常工作并解决你的问题。
如果你想了解更多,可以查看fastai论坛中的这个帖子。