在val时关于loss一个莫名其妙的问题
收藏
我在训练一个模型进行验证(val)的时候,如果不进行梯度计算,GPU会直接拉满,内存爆掉,请问有朋友遇到过这种问题吗?
# 训练
def vv_step(inp, targ):
loss = 0
enc_output, enc_hidden = encoder(inp)
dec_hidden = enc_hidden
dec_input = paddle.unsqueeze(paddle.to_tensor([comment_word2id_dict.get('')] * BATCH_SIZE), 1)
# 教师强制 - 将目标词作为下一个输入
for t in range(1, targ.shape[1]):
# 将编码器输出 (enc_output) 传送至解码器
predictions, dec_hidden= decoder(dec_input, dec_hidden, enc_output)
loss += getloss(predictions,targ[:, t])
# 使用教师强制
dec_input =paddle.unsqueeze(targ[:, t], 1)
batch_loss = (loss / int(targ.shape[1]))
# 问题出现在这里,如果下面这行注释掉,GPU就炸了!!!!
#batch_loss.backward()
return batch_loss
0
收藏
请登录后评论
你这个问题,环境情况什么的都不明确,建议查看一下自己的网络情况,如果有问题可以提一个issue
感觉不进行反向传播就会爆GPU内存没有道理。。。此外,你不是说进行验证吗?进行验证为什么要弄一个反向传播?