Fast Ai:AttributeError:“学习者”对象没有“fine_tune”属性

Bor*_*ury 2 fast-ai

Fast Ai 使用了一种非常规的风格from fastai import *

我个人不喜欢它,所以在 fastai 书第 2 章中煞费苦心地确定了每个导入,但遇到了错误

AttributeError: 'Learner' object has no attribute 'fine_tune'
Run Code Online (Sandbox Code Playgroud)

然而,当我然后去做

from fastbook import *
Run Code Online (Sandbox Code Playgroud)

有用。这是一个非常奇怪的行为,因为如果上述导入完成,则对 cnn_learner 类或包含它的模块进行了一些操作,使其具有 Fine_tune 方法。

我想避免这种编码风格,那么我应该怎么做才能加载正确版本的 Learner?

小智 7

我刚刚面临完全相同的问题。看了他们的一个教程后,我发现 cnn 学习器不是从预期的包中导入的。

from fastai.vision.all import cnn_learner
# rather than
from fastai.vision.learner import cnn_learner
Run Code Online (Sandbox Code Playgroud)

调用该fine_tune方法然后按预期工作!


Mat*_*ava 5

Fastai 做了很多猴子补丁。不仅适用于它自己的导入,还适用于其他库,例如pathlibtorch. 我个人也不喜欢这种编码风格,但事实就是如此。

我强烈建议创建一个单独的环境(例如通过 conda),在那里安装 fastai 并使用他们的from ... import *. 我过去曾尝试解决这些导入问题,但由于您不知道(除非您深入源代码)在哪里/什么内容被猴子修补,所以您将在missing attribute各处遇到类似的错误。

此外,它与其他一些库的兼容性也不佳。opencv我记得由于包依赖性,我很难让它工作,安装opencv破坏了 fastai 的一些功能(我后来才发现),因为覆盖了 fastai 在某些外部库中修补的东西。