之前本来想直接自己看pytorch的official tutorial的,但是发现pytorch中文手册中,有一斤翻译的版本,那就对照着看吧!
Part I. Why is Pytorch
I. Initialization
这部分主要介绍了如何初始化tensor(张量)也就是pytorch的Data structure,类似于ndarray之于numpy。
我们主要使用如下的几个function来定义tensor:
- x = torch.empy(X,Y)
- x = torch.rand(X,Y), 创建一个size为(X,Y)的,各个entry的value符合[0,1)的均匀分布的tensor。
- x = torch.randn(X,Y), 同上,只不过这个满足标准正态分布即均值0,方差1.
- x = torch.zeros(X,Y),
- x = torch.ones(X,Y)\
- 除此之外还有,x = torch.randn_like(x),来帮助我们快速定义一个和之前已定义的tensor具有一样的size的new tensor。
以上的几个函数均可以通过留下的接口dtype=…来直接定义数据的类型:常见的可选项为torch.float(32,64), torch.double, torch.long等等。如果我们想要查看tensor的shape我们用: x.size()就可以,不能用torch.size(x),切记!
还有就是对tensor的reshape操作,tensor是x.view(target_dimension) 以及 x.reshape(target_dimension)都接受的!
II. Numpy Bridge
这部分主要是讲tensor和numpy之间的相互转换,没啥好说的,
tensor 转 np array:
b = a.numpy(),若是gpu target则需要,
b = a.cpu().numpy()
np array 转tensor:
b = torch.from_numpy(a), 就可以自动转换了。但是注意,这个函数是没有dtype=…的接口的,也就是说,转换过来的tensor会自动根据np array本身的数据类型转换,若想进一步转换则需要在之后自己定义, e.g., torch.FloatTensor(x)。
III. CUDA tensors (Using GPU)
为了能将tensor变为cuda tensor并让其之后的运算都能在gpu上运行我们需要定义一下这个常见操作:
if torch.cuda.is_available():
device = torch.device("cuda") # a CUDA device object
y = torch.ones(2,3,dtype=torch.float, device=device)
print(y)
print(y.to("cpu", torch.double)) # ``.to`` can also change dtype together!