训练循环中损失显着增加

发布于 2025-01-15 02:33:13 字数 1587 浏览 4 评论 0原文

我的训练损失急剧增加。不知道这是为什么。我认为这可能与我计算损失的方式有关,但不确定。我认为这可能是因为我打印的是运行损失而不是每批损失。下面是我的训练循环:

def train_model(model, optimizer, train_loader,  num_epochs, criterion=criterion):
  
  total_epochs = notebook.tqdm(range(num_epochs))

  model.train()

  running_loss=0
  correct=0
  total=0

  for epoch in total_epochs:
    for i, (x_train, y_train) in enumerate(train_loader):

      x_train = x_train.to(device)
      y_train = y_train.to(device)
        
      y_pred = model(x_train)
      loss = criterion(y_pred, y_train)

      optimizer.zero_grad()
      loss.backward()
      optimizer.step()

      running_loss += loss.item()
      
      _, predicted = y_pred.max(1)
      train_loss=running_loss/len(train_loader)


      total += y_train.size(0)
      correct += predicted.eq(y_train).sum().item()
        
    train_loss=running_loss/len(train_loader)
    train_accu=100.*correct/total

    print('Train Loss: %.3f | Train Accuracy: %.3f'%(train_loss,train_accu))

但是当我调用 train_model():

train_md = train_model(cnn_net, optimizer, data_loaders['train'], 10)

它返回这个:

Train Loss: 1.472 | Train Accuracy: 47.949
Train Loss: 2.655 | Train Accuracy: 53.324
Train Loss: 3.732 | Train Accuracy: 56.521
Train Loss: 4.750 | Train Accuracy: 58.565
Train Loss: 5.728 | Train Accuracy: 60.130
Train Loss: 6.673 | Train Accuracy: 61.364
Train Loss: 7.590 | Train Accuracy: 62.335
Train Loss: 8.484 | Train Accuracy: 63.190
Train Loss: 9.365 | Train Accuracy: 63.934
Train Loss: 10.225 | Train Accuracy: 64.571

My training loss is increasing quite dramatically. Not sure why this is. I was thinking it could be something to do with how I am calculating the loss, but not sure. I think it might be because i am printing running loss instead of loss per batch. Below is my training loop:

def train_model(model, optimizer, train_loader,  num_epochs, criterion=criterion):
  
  total_epochs = notebook.tqdm(range(num_epochs))

  model.train()

  running_loss=0
  correct=0
  total=0

  for epoch in total_epochs:
    for i, (x_train, y_train) in enumerate(train_loader):

      x_train = x_train.to(device)
      y_train = y_train.to(device)
        
      y_pred = model(x_train)
      loss = criterion(y_pred, y_train)

      optimizer.zero_grad()
      loss.backward()
      optimizer.step()

      running_loss += loss.item()
      
      _, predicted = y_pred.max(1)
      train_loss=running_loss/len(train_loader)


      total += y_train.size(0)
      correct += predicted.eq(y_train).sum().item()
        
    train_loss=running_loss/len(train_loader)
    train_accu=100.*correct/total

    print('Train Loss: %.3f | Train Accuracy: %.3f'%(train_loss,train_accu))

However when i call train_model():

train_md = train_model(cnn_net, optimizer, data_loaders['train'], 10)

It returns this:

Train Loss: 1.472 | Train Accuracy: 47.949
Train Loss: 2.655 | Train Accuracy: 53.324
Train Loss: 3.732 | Train Accuracy: 56.521
Train Loss: 4.750 | Train Accuracy: 58.565
Train Loss: 5.728 | Train Accuracy: 60.130
Train Loss: 6.673 | Train Accuracy: 61.364
Train Loss: 7.590 | Train Accuracy: 62.335
Train Loss: 8.484 | Train Accuracy: 63.190
Train Loss: 9.365 | Train Accuracy: 63.934
Train Loss: 10.225 | Train Accuracy: 64.571

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情徒 2025-01-22 02:33:13

您不断将损失累积到 running_loss 上。
这就是为什么它每一个纪元都在增加的原因!

You keep accumulating the loss onto running_loss.
That's the reason why it's increasing every epoch!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文