Я пытаюсь использовать трансферное обучение с весами VGG16 и imag enet для решения проблемы регрессии. Я изменяю последний слой для линейного слоя с выходным размером 1 (см. Код ниже).
Тем не менее, прогноз моей сети очень странный. Мои значения тренировок являются ценами на недвижимость, поэтому >> 0 и моя сеть прогнозирует только значения <0. </p>
Есть мысли по этому поводу?
# 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)
Я проверил загрузчик данных и его подачу правильный ярлык ...
Спасибо!