1.问题描述
再使用pytorch过程中,将torch.FloatTensor类型的变量转换成胃nparray类型时报错,内容如下:
RuntimeError: Can't call numpy() on Variable that requires grad. Use var.detach().numpy() instead.
2.解决方法
出现这个现象的原因是:
待转换类型的torch.FloatTensor变量带有梯度,直接将其转换为numpy数据将破坏计算图,因此var.numpy()函数拒绝进行数据转换,实际上这是对开发者的一种提醒。
如果自己在转换数据时不需要保留梯度信息,可以在变量转换之前添加detach()调用。(其实错误信息中也表示出来了使用var.detach().numpy() 替换)。
假设原来的写法为:
variable.numpy()
改为:
variable.detach().numpy()
即可运行,这是这两天踩掉的坑,简单记录一下,希望可以帮到你。