首先我是看了之前的总结,也就是使用下面,但是仍然报错.
1. tensor转numpy: x.numpy()
a = torch.ones(5)
print(a) ##输出:tensor([1., 1., 1., 1., 1.])
转换:
b = a.numpy()
print(b) ##输出:[1. 1. 1. 1. 1.]
依然报错:
RuntimeError: Can't call numpy() on Variable that requires grad. Use var.detach().numpy() instead.
原因:我是将bert训练完的tensor转array,里面是带有梯度的,此时直接将其转换为numpy数据会破坏计算图,因此numpy拒绝进行数据转换,实际上这是对开发者的一种提醒。如果自己在转换数据时不需要保留梯度信息,可以在变量转换之前添加detach()
调用。假设原来的写法是:
b=a.numpy()
改为:
b=a.detach().numpy()
2.numpy转tensor: torch.from_numpy(x)
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a) ##[1. 1. 1. 1. 1.]
print(b) ##tensor([1., 1., 1., 1., 1.], dtype=torch.float64)
numpy转tensor:tensorflow版本:
b=tf.convert_to_tensor(a)