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