fast.ai课程Lesson1报错:'Sequential'对象无'fine_tune'属性
AttributeError: 'Sequential' object has no attribute 'fine_tune' 解决方法
问题重现
代码:
dls = DataBlock( blocks=[ImageBlock, CategoryBlock], get_items=get_image_files, splitter=RandomSplitter(valid_pct=0.2, seed=42), get_y=parent_label, item_tfms=[Resize(192, method='squish')] ).dataloaders(path, bs=32) learn = vision_learner(dls, resnet18, metrics=error_rate) learn.fine_tune(3)
错误信息:
Traceback (most recent call last): File "/Projects/fastai/l1-image-classification/l1_image_classification/build_model.py", line 39, in <module> build_model() File "/Projects/fastai/l1-image-classification/l1_image_classification/build_model.py", line 25, in build_model learn.fine_tune(3) ^^^^^^^^^^^^^^^ File "/Users/sys/Library/Caches/pypoetry/virtualenvs/l1-image-classification-ApaWH_9y-py3.11/lib/python3.11/site-packages/fastcore/basics.py", line 496, in __getattr__ if attr is not None: return getattr(attr,k) ^^^^^^^^^^^^^^^ File "/Users/sys/Library/Caches/pypoetry/virtualenvs/l1-image-classification-ApaWH_9y-py3.11/lib/python3.11/site-packages/torch/nn/modules/module.py", line 1614, in __getattr__ raise AttributeError("'{}' object has no attribute '{}'".format( AttributeError: 'Sequential' object has no attribute 'fine_tune'
问题原因
你传入vision_learner的resnet18是PyTorch原生的模型对象(通常从torchvision.models导入),而非fastai要求的模型名称字符串或适配后的模型构造器。当vision_learner接收原生PyTorch模型时,会直接返回该模型(类型为Sequential),而原生模型没有fastai的fine_tune方法。
修复方案
有两种正确的使用方式:
方式1:使用模型名称字符串
直接传入模型名称字符串,让fastai自动加载并封装为Learner实例:
learn = vision_learner(dls, 'resnet18', metrics=error_rate)
方式2:导入fastai适配的模型
从fastai.vision.models导入resnet18,确保是fastai适配后的版本:
from fastai.vision.models import resnet18 learn = vision_learner(dls, resnet18, metrics=error_rate)
注意:避免从
torchvision.models导入resnet18,这会导致传入原生模型对象,触发上述错误。
内容的提问来源于stack exchange,提问作者clay
相关产品推荐
相关产品推荐

