我想在自定义数据集上微调来自torch hub的I3D模型,该模型在Kinetics 400类上进行了预训练,其中我有4个可能的输出类。
我通过以下方式加载模型:
model = torch.hub.load("facebookresearch/pytorchvideo", i3d_r50, pretrained=True)
字符串
我把它打印出来,看到了这一层:
(6): ResNetBasicHead(
(pool): AvgPool3d(kernel_size=(4, 7, 7), stride=(1, 1, 1), padding=(0, 0, 0))
(dropout): Dropout(p=0.5, inplace=False)
(proj): Linear(in_features=2048, out_features=400, bias=True)
(output_pool): AdaptiveAvgPool3d(output_size=1)
型
所以,我试着:
model = torch.hub.load("facebookresearch/pytorchvideo", i3d_r50, pretrained=True)
num_classes = 4
model.ResNetBasicHead.proj = torch.nn.Linear(model.ResNetBasicHead.proj.in_features, num_classes)
型
但我得到了一个错误
AttributeError: 'Net' object has no attribute 'ResNetBasicHead'
型
怎么做才合适呢?
1条答案
按热度按时间vc6uscn91#
如果我理解正确的话,你想通过添加一个新的块来改变网络的块,即线性层。
你可以通过添加一个新的块来实现这一点。
第一个月
然后模型看起来像这样:
字符串
或者,如果你想将它添加到你的ResNetBasicHead,你可以这样做:
model.blocks[6].add_module("linear", torch.nn.Linear(model.blocks[6].proj.in_features, num_classes))
个其产生:
型