Pytorch 培训损失几乎保持不变,而验证损失在左右波动

Pytorch 培训损失几乎保持不变,而验证损失在左右波动,pytorch,transformer,loss,Pytorch,Transformer,Loss,我正在使用一个预训练的视觉变换模型来训练一个新模型,其中输入是图像,输出是这些图像的预测价格 由于Vision Transformer模型用于对1024个类进行分类,我将其最后一层更改为nn.Linear(1024,1),并使用MSELOST而不是softmax。然而,培训损失和验证损失一直居高不下。如下图所示,培训损失几乎保持不变,而验证损失在800000左右波动 你对我应该做些什么来改进学习有什么想法吗 [更新] 这是代码的一部分 #Import model pip install tim

我正在使用一个预训练的视觉变换模型来训练一个新模型,其中输入是图像,输出是这些图像的预测价格

由于Vision Transformer模型用于对1024个类进行分类,我将其最后一层更改为nn.Linear(1024,1),并使用MSELOST而不是softmax。然而,培训损失和验证损失一直居高不下。如下图所示,培训损失几乎保持不变,而验证损失在800000左右波动

你对我应该做些什么来改进学习有什么想法吗

[更新] 这是代码的一部分

#Import model
pip install timm
import timm
model = timm.create_model('vit_large_patch16_224_in21k', pretrained=True)
for param in model.parameters():
    param.requires_grad = False
    
model.head = nn.Sequential(nn.Linear(1024, 10), 
                           nn.ReLU(), 
                           nn.Linear(10, 1))
model.cuda()

#Training setting
device = 'cuda'
learning_rate = 0.0005
gamma = 0.1
seed = 42
use_gpu_number = 0
epochs = 30
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=learning_rate)
scheduler = StepLR(optimizer, step_size=7, gamma=gamma)

#Training
loss_list = []
val_loss_list = []
val_corr_list = []
for epoch in range(epochs):
    epoch_loss = 0
    epoch_accuracy = 0
    
    model.train()
    for images, price in tqdm(train_loader):
        images = images.to(device)
        price = price.to(device)

        optimizer.zero_grad()
        
        output = model(images)
        loss = criterion(output, price)
        
        loss.backward()
        optimizer.step()

        epoch_loss += loss / len(train_loader)
        
    loss_list.append(epoch_loss.float())

    model.eval()    
    with torch.no_grad():
        epoch_val_accuracy = 0
        epoch_val_loss = 0
        for images, price in valid_loader:
            images = images.to(device)
            price = price.to(device)

            val_output = model(images)
            val_loss = criterion(val_output, price)

            epoch_val_loss += val_loss / len(valid_loader)
        _, _, _, val_corr = model_valid(valid_loader,
                              model,
                              use_gpu_number,
                              criterion)
        
        val_loss_list.append(epoch_val_loss.float())
        val_corr_list.append(val_corr)

你能分享你正在使用的代码吗?很抱歉我回复晚了。我已经在帖子中添加了部分代码。