我正在与Keras
合作,并试图分析使用一些具有有意义权重的层和一些具有随机初始化的层构建的模型对准确性的影响
我使用加载方法上的include_top = False
参数加载VGG19
预训练模型
model = keras.applications.VGG19(include_top=False, weights="imagenet", input_shape=(img_width, img_height, 3))
我加载VGG19
预训练模型,直到与加载了Keras的前一个模型的同一层
model = torch.hub.load('pytorch/vision:v0.6.0', 'vgg19', pretrained=True)
new_base = (list(model.children())[:-2])[0]
加载模型后,下图显示了这些模型的摘要。(Pytorch
,Keras
)
到目前为止没有问题。之后,我想在这些预先训练好的模型上添加一个展平层和一个完全连接的层。我和Keras一起做的,但我不能和PyTorch一起做
new_model.summary()的输出为:
我的问题是,如何在PyTorch
中添加新层
从PyTorch教程"Finetuning TorchVision Models":
如果您只想替换分类器部分,那么您可以简单地这样做。即:
将为您提供:
之前:
之后:
还要注意,当您想要改变现有的体系结构时,您有两个阶段。您首先获得所需的模块(这就是您在那里所做的),然后必须将其包装在
nn.Sequential
中,因为您的列表没有实现forward()
,因此您无法真正向它提供任何信息。它只是一个模块的集合因此,一般来说,您需要这样做(例如):
请注意,如果要创建一个新模型,并打算像以下那样使用它:
您需要以第二种顺序包装功能和新图层。也就是说,像这样做:
否则,您必须执行以下操作:
相关问题 更多 >
编程相关推荐