1、tensor和numpy array之间的相互转换
# tensor和numpy array之间的相互转换
import numpy as np
g = np.array([[1,2,3],[4,5,6]])
h = torch.tensor(g)
print(h)
i = torch.from_numpy(g)
print(i)
j = h.numpy()
print(j)
tensor([[1, 2, 3],
[4, 5, 6]])
tensor([[1, 2, 3],
[4, 5, 6]])
[[1 2 3]
[4 5 6]]
注意:torch.tensor创建得到的张量和原数据是不共享内存的,张量对应的变量是独立变量。
而torch.from_numpy()和torch.as_tensor()从numpy array创建得到的张量和原数据是共享内存的,张量对应的变量不是独立变量,修改numpy array会导致对应tensor的改变。
2、扩展&压缩tensor的维度:squeeze
k = torch.rand(2,3)
o = torch.add(k,1)
print(o)
print(o.shape)
#unsqueeze扩展维度
r = o.unsqueeze(1)
print(r.shape)
s = r.squeeze(1)
print(s.shape)
tensor([[1.2852, 1.5366, 1.3711],
[1.0107, 1.4375, 1.3035]])
torch.Size([2, 3])
torch.Size([2, 1, 3])
torch.Size([2, 3])
注意:squeeze()方法的作用是移除tensor中维度大小为1的维度;unsqueeze可以任意扩展维度大小为1的维
3、GPU的设置有两种常见的方式:
# 方案一:使用os.environ,这种情况如果使用GPU不需要设置
os.environ['CUDA_VISIBLE_DEVICES'] = '0,1'
# 方案二:使用“device”,后续对要使用GPU的变量用.to(device)即可
device = torch.device("cuda:1" if torch.cuda.is_available() else "cpu")