【Error】: Trying to backward through the graph a second time, but the buffers have already been

本文解决了PyTorch中因使用同一输入多次反向传播导致的运行时错误。通过在每次反向传播前重新计算特征,避免了释放缓冲区的问题。适用于需要对不同任务进行梯度累积的情况。

错误:

RuntimeError: Trying to backward through the graph a second time, but the buffers have already been freed. Specify retain_graph=True when calling backward the first time.

代码:

        optimizer.zero_grad() # word
        features = encoder(src)     
        loss = decoder(features, trg)   
        loss.backward() 
        grad_norm = torch.nn.utils.clip_grad_norm(decoder.parameters(), opt.grad_clip)############3
        optimizer.step()

        optimizer.zero_grad() # pos
        # features = encoder(src)     
        loss = decoder.forward_pos(features, trg_pos)  
        loss.backward() 
        grad_norm = torch.nn.utils.clip_grad_norm(decoder.parameters(), opt.grad_clip)
        optimizer.step()

代码更改为:

        optimizer.zero_grad() # word
        features = encoder(src)     
        loss = decoder(features, trg)   
        loss.backward() 
        grad_norm = torch.nn.utils.clip_grad_norm(decoder.parameters(), opt.grad_clip)
        optimizer.step()

        optimizer.zero_grad() # pos
        features = encoder(src)     
        loss = decoder.forward_pos(features, trg_pos)  
        loss.backward() 
        grad_norm = torch.nn.utils.clip_grad_norm(decoder.parameters(), opt.grad_clip)
        optimizer.step()

错误消失。

 

参考网址:https://blog.csdn.net/u010829672/article/details/79538853

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值