深度学习报错记录:验证过后,训练时损失激增,特征提取为nan值

文章描述了在使用带有batchnorm和dropout的模型进行训练时,忘记在验证后将模型切换回训练模式导致的loss值剧增和特征值nan的问题,解决方案是确保每次训练和验证前后正确设置model的训练模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说结论:model验证完之后忘了转回训练模式(模型里有batchnorm和dropout会出问题)

原本代码结构:

loss_fn = nn.CrossEntropyLoss()

def train(dataloader, model, loss_fn, ...):

        for x,y in dataloader:
            ...
            feature = model.forward(x) 
 
            pred = model.pred(feature) 

            loss = loss_fn(pred, y)
            ...

def val(dataloader,model,...):
        
        model.eval()

        for x,y in dataloader:
                ...
                ...

model.train()

for iteration in range(iteration_per_epoch * epoch):

        train(...)

        if iteration%500==0:

                val(...)

现象:我发现,在500次迭代之前(第一次验证之前)训练都不会出现问题,一旦验证过一次,之后的训练中的loss值会突然剧增(loss增大到1.54e+18这个量级),紧接着特征提取时feature会出现nan值。

解决:每次训练之前都要设置model.tr

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值