首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用VGG16架构的维度问题

使用VGG16架构的维度问题
EN

Stack Overflow用户
提问于 2020-03-04 23:16:19
回答 1查看 103关注 0票数 0

我尝试使用vgg16架构,然后使用卷积层。我知道vgg16的输出应该是7x7的512个通道,但由于某种原因,它只是以某种一维列表的形式给出了输出。

因此,我一直收到以下错误: RuntimeError:对于4维权重10051233,需要4维输入,但得到的是大小为64,25088的2维输入

我试图重塑vgg16的输出,但没有成功。有什么建议吗?我只想在vgg16后面放一个卷积层,而不是完全连接的层,这样它就不会有太多的参数

代码(只有vgg16的一部分和我想要添加的网络)

代码语言:javascript
复制
#Choosing our pretrained network model
pre_trained_model = tv.models.vgg16(pretrained=True)
pre_trained_model = pre_trained_model

# freeze parameters
for param in pre_trained_model.parameters():
param.requires_grad = False

# add layers to train
from collections import OrderedDict
#classifier = classifier.nn.Size([1, 512, 7, 7])
classifier = nn.Sequential(OrderedDict([
                      ('conv1', nn.Conv2d(512, 100, 3)),
                      ('fc1', nn.Linear(2500, 400)),
                      ('dr1', nn.Dropout(p = 0.3)),
                      ('bn1', nn.BatchNorm1d(num_features=400)),
                      ('relu2', nn.ReLU()),
                      ('fc2', nn.Linear(400, 100)),
                      ('dr2', nn.Dropout(p = 0.3)),
                      ('bn2', nn.BatchNorm1d(num_features=100)),
                      ('relu3', nn.ReLU()),
                      ('fc3', nn.Linear(100, 2)),
                      ]))
EN

回答 1

Stack Overflow用户

发布于 2020-03-04 23:27:23

如果你仔细观察VGG's forward function

代码语言:javascript
复制
def forward(self, x):
        x = self.features(x)
        x = self.avgpool(x)
        x = torch.flatten(x, 1)
        x = self.classifier(x)
        return x

self.classifier生效之前,您会注意到torch.flatten调用。这就是为什么你将输入作为一个“扁平化”的2D特征向量。

您也许能够使用torch.viewtorch.reshape“撤销”torch.flatten,但您需要知道输入的空间尺寸以及它们如何影响要素地图的空间形状。也就是说,仅对于形状batch-by-3-224-224的输入,特征映射是形状batch-by-512-7-7。如果更改输入大小(因为此时的网络是完全卷积的),则特征映射形状可能会发生变化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60529201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档