我正在尝试将转移学习与VGG16和imagenet权重一起用于回归问题。我将最后一层更改为输出大小为1的线性层(请参见下面的代码)。
但是,我对网络的预测非常奇怪。我的训练值是房地产价格,因此>> 0,而我的网络仅预测值<0。
对此有何想法?
# Need to change dataloader to bring class model
model = models.vgg16_bn(pretrained=True)
criterion = nn.MSELoss() #nn.CrossEntropyLoss() #nn.MSELoss()
optimizer = optim.Adam(model.parameters())
# Freeze training for all layers
for param in model.features.parameters():
param.require_grad = False
# Newly created modules have require_grad=True by default
num_features = model.classifier[6].in_features
features = list(model.classifier.children())[:-1] # Remove last layer
features.extend([nn.Linear(num_features, 1)]) # Number of output necessary
model.classifier = nn.Sequential(*features) # Replace the model classifier
if use_gpu:
model.cuda()
num_epochs = 20
dir_ = 'Weigths/'
vgg16 = train_model(model, criterion, optimizer, num_epochs=num_epochs, classification=False)
我已经检查了数据加载器并为其提供了正确的标签...
谢谢!