Я попытался использовать архитектуру vgg16, а затем слой свертки. Я знаю, что выходные данные vgg16 предполагаются равными 512 каналам 7x7, но по какой-то причине он просто выводит их в виде некоего одномерного списка.
, поэтому я продолжаю получать следующую ошибку: RuntimeError: Ожидается 4-мерный ввод для 4-мерного веса 100 512 3 3, но вместо этого получается 2-мерный ввод размера [64, 25088]
Я попытался изменить вывод vgg16 безуспешно. какие-либо предложения? все, что я хочу, это поместить слой свертки, а не полностью связанный слой, после vgg16, чтобы он не имел слишком большого количества параметров
кода (только часть vgg16 и сеть, которую я хочу добавить)
#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)),
]))