目录
1.Pytorch介绍与安装
1.1 介绍
1.2 Pytorch安装
2 Torch
2.1 Tensor构造
2.1.1 torch.from_numpy构造 - 维度任意
2.1.2 使用数组直接构造 - 维度任意
2.1.3 torch.eye构造 - 多维
2.1.4 torch.linspace构造 - 一维
2.1.5 torch.logspace 构造 - 一维
2.1.6 torch.ones构造 - 多维
2.1.7 torch.zeros构造 - 多维
2.1.8 torch.rand构造 - 均匀分布 - 多维
2.1.9 torch.randn - 标准正态分布 - 多维
2.1.10 torch.randperm - 一维
2.1.11 torch.arange - 一维
PyTorch是一个开源的Python机器学习库,它是一个基于Python的可续计算包,提供两个高级功能:
1、具有强大的GPU加速的张量计算(如NumPy)
Pytorch中都是以张量(tensor)这种结构进行运算的,torch提供了各种张量计算的方法,torch工具库类似于Python中的Numpy库,Numpy中的核心结构为ndarrays,而torch中的核心结构为tensor,同时torch提供了高效的基于GPU的运算,如果你的设备支持GPU计算,则是一个非常好的选择,GPU的运算效率会明显高于CPU的运算效率。
2、包含自动求导系统的深度神经网络
在经典的人工神经网络中,神经网络的学习是在隐藏层中进行的,而所谓的学习过程是通过输出层的误差去调节网络中的权重,通过构建误差与权重的函数,使用梯度下降法计算误差最小时的权重变化,从而调节权重,达到学习的目的。
而torch中提供了自动求导的方法,可通过配置 requires_grad=True达到自动求导的目的,十分便捷,同时torch.nn 中也提供了构建神经网络的各种方法,种种因素都为Pytorch提供了充足的竞争优势,可以在深度学习中大展拳脚,目前来看深度学习已经融入了生活中的方方面面,图像处理、自然语言处理等等。
Pytorch官网提供了安装的详细命令,可以通过选择自己的操作系统、Python版本、是否为GPU等条件,选择好后复制提供的命令到终端进行安装即可。
我自己的操作系统为macos,未使用GPU加速,Python版本为3.6,安装命令为
pip install torch==1.2.0,torchvision==0.4.0
目前最新的torch版本为1.5.0,在安装时可以使用 == 指定版本安装。
在学习一个工具库之前需要了解其基础的功能函数, torch
包含了多维张量的数据结构以及基于其上的多种数学操作。另外,它也提供了多种工具,其中一些可以更有效地对张量和任意类型进行序列化。下面对torch库中的方法进行介绍。
import torch
import numpy as np
np_data = np.arange(3)
tensor = torch.from_numpy(np_data)
print(np_data)
print(tensor)
上述程序使用numpy构造的数据构造tensor,numpy的arange构造 [0,1,2] 的一维数组,然后使用torch库的from_numpy函数将数据转换为tensor,输出结果如下图所示:
还可以通过直接传入数据进行构造,程序如下:
import torch
tensor = torch.Tensor(
[[1,2,3],
[4,5,6]]
)
print(tensor)
使用torch的Tensor函数将二维数组转换为tensor。
torch.eye 用于构造对角线元素均为 1、其他元素均为0 的二维张量,使用格式如下图所示:
torch.eye(m,n)
通过以下程序构造了3个二维张量:
import torch
a = torch.eye(3,3)
b = torch.eye(3)
c = torch.eye(3,2)
运行结果验证了可选参数 列,即张量a与张量b是完全一致的,若张量不是方阵,则会根据行数或列数的最小值选择一个方阵,并使其对角元素均为1.
torch.linspace(start, end, steps=100, out=None) → Tensor
返回一个1维张量,包含在区间start
和 end
上均匀间隔的steps
个点。 输出1维张量的长度为steps,即为100
。
torch.logspace(start, end, steps=100, out=None) → Tensor
torch.logspace 同 torch.linspace均返回一个1维张量 ,参数相同,但torch.logspace的 区间为10^start -- 10^end,同样是均匀间隔取值。
torch.ones(*sizes, out=None) → Tensor
torch.ones用于构造一个全为1的张量,张量大小通过参数sizes配置,例:
torch.zeros(*sizes, out=None) → Tensor
torch.zeros用于构造一个全为0的张量,张量大小配置方式同上。
torch.rand(*sizes, out=None) → Tensor
构造由区间 [0,1) 的均匀分布中抽取的一组随机数,张量大小通过设置参数sizes实现,例:
torch.randn(*sizes, out=None) → Tensor
返回一个张量,包含了从标准正态分布(均值为0,方差为 1,即高斯白噪声)中抽取一组随机数,形状由可变参数sizes
定义,例:
torch.randperm(n, out=None) → LongTensor
给定参数n
,返回一个从0
到n -1
的随机整数排列。参数n为int,返回的张量为一维,
torch.arange(start, end, step=1, out=None) → Tensor
返回一个1维张量,长度为((end−start)/step)的向下取整。包含从start
到end
,以step
为步长的一组序列值(默认步长为1)。