Pytorch简介
PyTorch是一个Python包,提供两个高级功能:
- 具有强大的GPU加速的张量计算(如NumPy)
- 包含自动求导系统的的深度神经网络
服务于以下两种场景: - 作为NumPy的替代品,可以使用GPU的强大计算能力
- 提供最大的灵活性和高速的深度学习研究平台
张量Tensor
各种数值数据统称为张量
- 常量:scaler:0阶张量
- 向量:vector:1阶张量
- 矩阵:matrix:2阶张量
一、使用:
- 使用python列表或者序列创建tensor(是浮点型)
torch.tensor([1,2,3])
- numpy生成再转换为tensor
torch.tensor(np.array([[1,2,3],[4,5,6]]))
-
使用torch的api创建tensor
1、torch.empty(3,4)
创建3行4列的的为空的tensor,会用无用数据进行填充2、
toch.ones([3,4])
创建3行4列的全为1的tensor。
torch.ones_like(input)
相当于torch.ones(input.size(), dtype=input.dtype, layout=input.layout, device=input.device)
,类似于复制了一个和input类型一样但是里面的数据全为13、
torch.zeros([3,4])
创建3行4列的全为0的tensor4、
torch.rand([3,4])
创建3行4列的随机值的tensor,随机值区间是[0,1)
(可以等于0,但不能等于1)5、
torch.randint(low=0,high=10,size=[3,4])
创建3行4列的随机整数的tensor,随机值的区间是[low,high)
二、tensor常用方法:
- 获取tensor中的数据(当tensor中只有一个元素可用):
tensor.item()
(当有两个元素就不可以)
t1 = torch.Tensor([[[1]]])
t1
output : tensor([[[1.]]])
t1.item()
1.0
-
转化为numpy数组
z.numpy()
注: tensor和numpy的转换注意一些情况是会共享内存地址的,详解请看我的转载博客:tensor和numpy之间的转换 -
获取形状
tensor.size()
使用tensor.shape
也可,但是size()可获取具体某一个维度的形状
t = torch.Tensor([[[1,2]]])
t.size()
output:torch.Size([1, 1, 2])
t.size(-1) ##-1表示最后一个维度的大小
output:2
t.size(0)
output:1
t.size(1)
output:1
-
改变形状```tensor.view(3,4)。类似numpy中的reshape,是一种浅拷贝,仅仅是形状发生改变,并且数据本身并没有发生任何变化
-
获取阶数:
tensor.dim()
(上面的t因为是三维,所以输出为3) -
获取最大值、最小值:
tensor.max()
tensor.min()
-
转置:
tensor.t()
(二维)
tensor.transpose(0,1)
表示交换一维和二维的大小(适用于__二维、高维__)
tensor.permute(1,0,2)
表示交换一维和二维的大小(与transpose相比,需要多输入一个数,适用于__高维__)
补充:view()和permute()的区别
https://zhuanlan.zhihu.com/p/88311093 -
取值和赋值
tensor[1,3]
表示获取第一行第三列的值
tensor[1,3]=100
表示第一行第三列的位置进行赋值100 -
tensor的切片
tensor[:,:,1]
表示取三维中所有第二列的数据
三、tensor数据类型
-
获取tensor数据类型:
tensor.dtype
-
创建数据的时候指定类型:
torch.ones([2,3],dtype=torch.float32)
-
torch.Tensor和torch.tensor的区别
i. 全局(默认的数据类型)是torch.float32
ii.torch.Tensor()
传入数字(例如torch.Tensor(3,4)
则表示三行四列的矩阵)表示形状,和torch.FloatTensor
相同;
torch.Tensor
传入的是列表表示数据(例如torch.Tensor([3,4])则表示一行两列的数据)
iii. torch.tensor为创建tensor的方法
四、tensor的其他操作
-
相加
i.x+y 或 x+10
ii.torch.add(x,y)
iii.x.add(y)
iv. ```x.add_(y)``#带下划线的方法会对x进行就地修改,x发生改变 -
GPU中的tensor的使用```torch.cuda``
通过.to方法能够把一个tensor转移到另外一个设备(比如从CPU转到GPU)
#device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
if torch.cuda.is_available():
device = torch.device("cuda") ##cuda device对象
y = torch.ones_like(x, device=device) ##创建一个在cuda上的tensor
x = x.to(device) ##使用方法把x转为cuda 的tensor
z = x + y
print(z)
print(z.to("cpu", torch.double))## .to方法能够同时设置类型