RuntimeError: cudnn RNN backward can only be called in training mode
原因分析与解决办法
其中一个原因是:
当训练RNN或者是LSTM时,train和eval过程混淆在一起,没有明确指明模式(即eval过后,没有切换成train模型就进行下一轮训练),便会出现以上报错
解决办法:
torch.backends.cudnn.enabled = False
设置之后即可正常运行,但大家可能会好奇为什么是这样,以及像这样设置之后会不会造成模型性能下降等问题!
torch.backends.cudnn解析
torch.backends.cudnn.enabled=True代表使用非确定性算法进行加速。
再令torch.backends.cudnn.benchmark=True代表该非确定算法自动寻找最适合当前配置的高效算法,来达到优化运行效率的问题,在一定程度上是牺牲了精度还换取效率,并且无法保证模型的可复现性。
可以使用torch.backends.cudnn.enabled = False来进行禁用
并且从找到的资料上来看应该不会降低模型性能