Pytorch学习笔记
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一、简介
PyTorch是美国互联网巨头Facebook在深度学习框架Torch的基础上使用Python重写的一个全新的深度学习框架,它更像NumPy的替代产物,不仅继承了NumPy的众多优点,还支持GPUs计算,在计算效率上要比NumPy有更明显的优势;不仅如此,PyTorch还有许多高级功能,比如拥有丰富的API,可以快速完成深度神经网络模型的搭建和训练。所以 PyTorch一经发布,便受到了众多开发人员和科研人员的追捧和喜爱,成为AI从业者的重要工具之一。
二、Tensor
Tensor,张量。在TensorFlow中数据的核心单元就是Tensor。在PyTorch中Tensor负责存储基本数据,PyTorch也对Tensor提供了丰富的函数和方法,PyTorch中Tensor与Numpy的数组十分相似。并且PyTorch中定义的Tensor数据类型可以实现在GUPs上进行运算,并且只需要对变量做一些简单的类型转换就可以实现。
1.Tensor的数据类型
首先需要掌握Tensor定义不同数据类型的方法,常用的如下:
2.Tensor创建
2.1典型的tensor构建方法
torch.tensor(data,
dtype=None,
device=None,
requires_grad=False,
pin_memory=False)
功能解释:从data创建tensor
data:数据,可以是list,ndarray
dtype:数据类型
device:所在设备,cuda/cpu
requires_grad:是否计算梯度
pin_memory:是否存于锁页内存
2.2从其他形式转换成tensor
torch.from_numpy(ndarray)
功能解释:从numpy转换成tensor
通过该函数将ndarray转换成tensor格式后,原ndarray与tensor共享内存,当其中一个被更改则另一个也发生更改。
torch.as_tensor(data,
dtype=None,
device=None)
功能解释:将数据直接转换成tensor
dtype : 数据类型
device : 所在设备,cuda/cpu
2.3创建特殊值组成的tensor
torch.zeros()
torch.zeros(size,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能解释:创建size大小,值全为0的Tensor
size: 张量的形状,如(3, 3)、(3, 224,224)
out : 输出的张量,将创建的tensor赋值给out,共享内存
dtype : 数据类型
layout : 内存中布局形式,有 strided,sparse_coo(稀疏张量使用)等
device : 所在设备,cuda/cpu
requires_grad:是否需要计算梯度
torch.zeros_like()
torch.zeros_like(input,
dtype=None,
layout=None,
device=None,
requires_grad=False)
功能解释:创建input.size()大小,值全为0的Tensor
intput: 创建与input同形状的全0张量
torch.ones()
torch.ones(size,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能解释:创建size大小,值全为1的Tensor
torch.ones_like()
torch.ones_like(input,
dtype=None,
layout=None,
device=None,
requires_grad=False)
功能解释:创建input.size()大小,值全为1的Tensor
torch.full()
torch.full(size,
fill_value,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能解释:创建size大小,值全为fill_value的Tensor
fill_value:张量中填充的值
torch.full_like()
torch.full_like(input,
fill_value,
dtype=None,
layout=None,
device=None,
requires_grad=False)
功能解释:创建input.size()大小,值全为fill_value的Tensor
torch.eye()
torch.eye(n,
m=None,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能解释:创建n行m列的,对角线值为1其他值为0的Tensor,注意:未输入m时,m=n
torch.tempy()
torch.empty(sizes,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能解释:创建sizes大小的tensor,里面填入out中对应索引的值,如果不足补0。如果没有导入out则随机生成。
out:创建的tensor将对应索引设置成out中相同的值
torch.tempy_like()
torch.empty_like(input,
dtype=None,
layout=None,
device=None,
requires_grad=False)
功能解释:创建input.size()大小,值全为0的Tensor
2.4按步长或者区间创建tensor
torch.arange()
torch.arange(start=0,
end,
step=1,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能解释:创建起始值start,结束值end,步长step,等差的一维张量(int64,不包括end)
start:数列起始值,默认为0
end:数列结束值
step:数列公差,默认为1
torch.range()
torch.range(start=0,
end,
step=1,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能解释:创建起始值start,结束值end,步长step,等差的一维张量(float32,包括end)
torch.linspace()
torch.linspace(start,
end,
steps=100,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能解释:创建起始值start,结束值end,步长(end-start)/steps,等差的一维张量
steps:创建张量中元素的个数,默认值为100
torch.logspace()
torch.linspace(start,
end,
steps=100,
out=None,
dtype=None,
layout=torch.strided,
device=None,
requires_grad=False)
功能解释:创建起始值10start,结束值10end,步长10^(end-start)/steps,等差的一维张量
2.5Tensor的组合/变形
torch.cat()
torch.cat(seq,
dim=0,
out=None)
功能解释:将seq序列在dim维度上连接在out中
seq: python序列或者相同类型的张量序列
dim:沿着此维度连接张量,0沿y轴,1沿x轴
out:输出参数
torch.t()
torch.t(input)
功能解释:将tensor转置,只针对2D
torch.transpose()
torch.transpose(input,
dim0,
dim1)
功能解释:交换两个维度
torch.squeeze()
torch.squeeze(input,
dim=None,
out=None)
功能解释:去除那些维度大小为1的维度
torch.unbind()
torch.unbind(tensor,
dim=0)
功能解释:去除某个维度
torch.unsqueeze()
torch.unsqueeze(input,
dim,
out=None)
功能解释:在指定位置添加维度