注意:本方法不适用于全部问题,仅为本人实验过程中遇到问题进行解决的记录。

问题出现于训练代码train.py

  1. 出现问题代码 ,问题出现在倒数第二行。
   model.train()
    for i, pack in enumerate(train_tbar):
    
        batch_size = pack[0].size(0)

        optimizer.zero_grad()
        images, gts = pack
        images = Variable(images)
        gts = Variable(gts)
        images = images.cuda()
        gts = gts.cuda()

        atts = model(images)

        loss1 = criterion(atts, gts)
        loss = loss1
        loss.backward()
        optimizer.step()

        now_train_loss += loss * batch_size
        now_iter_size  += batch_size
  1. 如何修改? ,将原先的代码修改为如下,即可解决。
        now_train_loss += loss.item() * batch_size
  1. 为什么这么修改?
	loss.item() 是 PyTorch 中 Tensor 对象的方法,它将张量中的单个值转换为一个 Python 标量。这个方法常用于从包含标量的张量中提取数值,以便进行进一步处理或记录。
	根据网上评论得知:如不修改,Loss张量会一直累积在内存中,导致内存逐渐增大。(不知真假)
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐