内容原文:https://morvanzhou.github.io/tutorials/machine-learning/torch/
它是一个基于Python的科学计算包,其主要是为了解决两类场景:
1、一种是可以替代Numpy进行科学计算,同时还可以使用张量在GPU上进行加速运算。
2、一个深度学习的研究平台,提供最大的灵活性和速度。
一、Tensors(张量)
Tensors形式是一个和Numpy的ndarrays很像的对象类型,但是性能上有其特殊之处就是可以利用张量在GPU上加速运算。
from __future__ import print_function
import torch
构建一个5*3的矩阵,未初始化的:
x = torch.Tensor(5,3)
print(x)
构建一个随机初始化的矩阵:
x = torch.rand(5,3)
print (x)
获得size:
print(x.size())
torch.Size是一个tuple,支持所有tuple操作。
二、操作
每种操作都有不同的语法,下面以加法为例解释下:
(1)直接使用符号+
y = torch.rand(5,3)
print (x+y)
(2)使用torch.add()函数
print(torch.add(x,y))
(3) 在torch.add()中添加一个out参数,并创建一个Tensors对象来接收out的结果
result = torch.Tensor(5,3)
torch.add(x,y,out=result)
print(result)
(4) 这句中y.add_(x)会替换掉y,也就是:任何改变张量的操作方法都是以后缀 _结尾的, eg : x.t _(),并且替换x。
y.add_(x)
print(y)
关于Tensors的索引和ndarrary一样:
print(x[:,1])
可以使用torch.view来改变tensors的size:
x = torch.rand(4,4)
y = x.view(16)
z = x.view(-1,8)
print(x.size(), y.size(), z.size())
三、NumPy Bridge
tensor和Numpy数组间的相互转化(两者共享同一内存位置,所以一个改变,另一个也会跟着改变)
a = torch.ones(5)
print(a)
b = a.numpy() #tensors转numpy数组
print(b)
a.add_(1)
print(a)
print(b)
Numpy数组转为tensor
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a) #
print(a)
print(b)
CUDA Tensors
可以使用.cuda方法将Tensors移动到GPU上。
if torch.cuda.is_available():
x = x.cuda()
y = y.cuda()
x+y