WARNING:root:NaN or Inf found in input tensor.Test loss: nan,

博客作者在进行深度学习模型训练时遇到了准确率低和loss为nan的问题。首先,他们发现学习率过大或数据集问题可能导致梯度消失或爆炸,但调整学习率和检查数据集并未解决问题。后来发现是`net.train()`的使用位置错误,将其从循环外移到循环内解决了训练不正常的问题。此外,作者还提到优化器的选择影响训练结果,将原本的SGD优化器改为Adam后,训练恢复正常,最终成功完成训练。
摘要由CSDN通过智能技术生成

train的位置

今天把epoch改成step训练结果奇怪的发生了

在这里插入图片描述
然后准确率也超级低

在这里插入图片描述
查问题说是学习率过大或者数据有问题,导致梯度消失或者梯度爆炸,检查数据集或者不断调低学习率。

但是对于我来说是跑过的一样的数据集一样的读取和预处理,另外学习率已经够低了,说学习率调到0 错误消失说明就不是数据集的问题,我这样做了,但是精度一样如上的低,虽然Test loss 有数值了。

在这里插入图片描述
看代码也没问题,结果,果然是很细小的错误,

net.train()的用法位置!!!!!

先看epoch训练的net.train()位置

def train(total_step, net, optimizer, train_loader, criterion):
    
    net.train() # 这时候大部分代码都放这儿的
    
    for _,data in enumerate(train_loader):  # 以为把这里变成step放进总训练就好
        label = data.y
        if torch.cuda.is_available():
            data = data.to(device)
            label = label.to(device)

        # 前向传播计算损失
        out = net(data).squeeze()
        loss = criterion(out, label)

!!!重点就是net.train()的位置,(很多博客都说放在训练前的,以前epoch训练没问题,换step时粗心没有注意到,这样放的

    while total_step < args.need_step:
        # net.train() # 不应该放在这里了
 
        for step, data in enumerate(train_loader):  
        	net.train() # 放这里了
            label = data.y
            if torch.cuda.is_available():
                data = data.to(device)
                label = label.to(device)

            # 前向传播计算损失
            out = net(data).squeeze()  
            # 算损失
            loss = criterion(out, label)  
            ......

然后就正常了
在这里插入图片描述

优化器

2022.12.6晚更
调GIN调到脑壳大,各种参数层次都改了,而且本地没有数据,服务器上又不好调试,只有print来看,调了十多种可能,在明天即将组会的我还没跑出来。在这个差几分钟12点的夜晚,突然灵光一闪,好像以前有loss=nan的情况,除了写的这篇博客net.train的位置,还有就是优化器!!!没错,原始数据是Adam,后面导师让改成了SGD,SGD在GraphSage,GatedGCN都没问题,(那是在跑哪个GCN出现的这俩优化器换了会loss=nan),记不清了,反正灵光一闪是有这个印象,
在这里插入图片描述

果然,把SGD换成Adam

在这里插入图片描述
几个epoch后在这里插入图片描述

好了,可算是结束了。。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lanmy_dl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值