文章目录
- 1.1.PyTorch简介
- PyTorch 发展
- PyTorch优点
- 适合人群
- 软件安装
- 解释器与工具包
- 虚拟环境(略)
- 1.2.Anaconda安装
- 1.3.Pycharm安装
- 1.4.PyTorch安装
- 2.1.Tensor概念
- Tensor与Variable
- Tensor
- 2.2.Tensor创建一:直接创建
- 2.3.Tensor创建二:依据数值创建
- 2.3.1torch.zeros()
- 2.3.2 torch.ones_like()
- 2.3.3 torch.full()和 torch.full_like()
- 2.3.4 2.7 torch.arange()
- 2.3.5 torch.linspace()
- 2.3.6 torch.logspace()
- 2.3.7 torch.eye()
- 2.4.Tensor创建三:依据概率创建
- 2.4.1 torch.normal()
- 2.4.2 torch.randn()和 torch.randn like()
- 2.4.3torch.randint()和torch.randint_like()
- 2.4.4 torch.randperm()
- 2.4.5 torch.bernoulli()
1.1.PyTorch简介
py指的是python
2017年1月,FAIR(FacebookAl Research)发布PyTorch
PyTorch是在Torch基础上用python语言重新打造的一款深度学习框架
Torch是采用Lua语言为接口的机器学习框架,但因Lua语言较为小众,导致Torch知名度不高
PyTorch 发展
·2017年1月正式发布PyTorch
·2018年4月更新0.4.0版,支持Windows系统,caffe2正式并入PyTorch
·2018年11月更新1.0稳定版,已GitHub增长第二快的开源项目
·2019年5月更新1.1.0版,支持TensorBoard,增强可视化功能
·2019年8月更新1.2.0版,更新torchvision,torchaudio和torchtext,增加更多功能
·2019.10.2更新1.3.0版
李飞飞老师得意门生Andrej Karpathy大神(斯坦福的cs2331n最开始是他上的,现在在特斯拉任职)做的一个图(2014年10月至2018年02月arXiv论文中深度学习框架提及次数统计),说明了一个趋势:
PyTorch的增长速度与TensorFlow一致
2019年3月各深度学习框架在GitHub上的Start,Forks,Watchers和Contributors数量对比
PyTorch优点
·上手快:掌握Numpy和基本深度学习概念即可上手
·代码简洁灵活:用nn.module封装使网络搭建更方便;基于动态图机制,更灵活
·Debug方便:调试PyTorch就像调试Python代码一样简单
·文档规范:https://pytorch.org/docs/可查各版本文档
·资源多:arXiv中的新算法大多有PyTorch实现
·开发者多:GitHub上贡献者(Contributors)已超过1100+
·背靠大树:FaceBook维护开发
适合人群
·深度学习初学者:模型算法实现容易,加深深度学习概念认识
·机器学习爱好者:数十行代码便可实现人脸识别,目标检测,图像生成等有趣实验
·算法研究员:最新arXiv论文算法快速复现
软件安装
Python包管理器
Python集成开发环境
PyTorch
解释器与工具包
解释器:将python语言翻译成机器指令语言
工具包
工具包又称为依赖包、模块、库、包、python之所以强大是因为拥有大量工具包
内置包:os、sys、glob、re、math等
第三方包:pytorch,tensorflow,numpy等
虚拟环境(略)
各环境间相互独立,可随意切换
1.2.Anaconda安装
Anaconda是为方便使用python而建立的一个软件包,其包含常用的250多个工具包,多版本python解释器和强大的虚拟环境管理工具,所以Anaconda得名python全家桶Anaconda可以使安装、运行和升级环境变得更简单,因此推荐安装使用
安装步骤:
1.官网下载安装包https://www.anaconda.com/distribution/#download-section
2.运行Anaconda3-2019.07-Windows-x86_64.exe
3.选择路径,勾选Add Anaconda to the system PATH environment variable,等待安装完成(这个hin重要)
4.验证安装成功,打开cmd,输入conda,回车
5.添加中科大镜像
1.4.PyTorch安装
安装步骤:
1.检查是否有合适GPU,若有,需安装CUDA与CuDNN
2.CUDA与CuDNN安装(非必须)
2.1下载并安装CUDA,查看cuda是否安装成功的命令:
2.2下载并解压缩CuDNN,把下面三个文件夹拷贝到cuda安装目录下。
在demo_suite文件夹下测试是否安装成功
还可以用deviceQuery.exe来查看设备信息。
3.下载whl文件,登陆https://download.pytorch.org/whl/torch_stable.html
命名解释:
cu92/torch-1.2.0%2Bcu92-cp37-cp37m-win_amd64.whl
cu92:cuda版本或cpu
torch-1.2.0:pytorch版本号
cp37:python版本号
win_amd64:操作系统
(接上)下载pytorch与torchvision的whl文件,进入相应虚拟环境,通过pip安装
这里注意可以根据提示到相应网站直接下载文件后再装会快一点。
4.在pycharm中创建hello pytorch项目,运行脚本,查看pytorch版本
这里运行报错,因为还没有导入torch的包,在pycharm最下面点Terminal输入下面的语句创建相应的虚拟环境。
使用下面命令激活虚拟环境。
然后跳转到torch包的目录,并用pip手动安装torch包。
用同样的方式安装torchvision
然后点击菜单File->Setting把当前项目的解释器(interpreter)关联到新的虚拟环境中
添加环境要显示隐藏文件夹,就是下面红圈的那个眼睛:
2.1.Tensor概念
张量是一个多维数组,它是标量、向量、矩阵的高维拓展
Tensor与Variable
Variable是torch.autograd中的数据类型主要用于封装Tensor,进行自动求导(Variable在0.4.0版本已经并入Tensor,但是仍然要了解Variable)
data:被包装的Tensor
grad:data的梯度
grad_fn:创建Tensor的Function,是自动求导的关键
requires_grad:指示是否需要梯度
is_leaf:指示是否是叶子结点(张量)
Tensor
PyTorch0.4.0版开始,Variable并入Tensor
dtype:张量的数据类型,如 torch.FloatTensor,torch.cuda.FloatTensor
shape:张量的形状,如(64,3,224,224)
device:张量所在设备,GPU/CPU,是加速的关键
给出两个常用的dtype
2.2.Tensor创建一:直接创建
torch.tensor(data, dtype=None, device=None, requires_grad=False, pin_memory=False)
torch.tensor():功能:从data创建tensor
data:数据,可以是list,numpy
dtype:数据类型,默认与data的一致
device:所在设备,cuda/cpu
requires_grad:是否需要梯度
pin_memory:是否存于锁页内存
例子:
#通过torch.tensor创建张量
flag=True
#flag=False
if flag:
arr=np.ones((3,3))
print("ndarray的数据类型:",arr.dtype)
#t=torch.tensor(arr,device='cuda')如果用这行就会慢一点,因为把数据从cpu转到gpu会比较花时间。
t=torch.tensor(arr)
print(t)
torch.from_numpy(ndarray)
功能:从nunpy创建tensor
注意事项:从torch.from_numpy创建的tensor于原ndarray共享内存,当修改其中一个的数据,另外一个也将会被改动
#通过torch.from_numpy创建张量
flag=True
#flag=False
if flag:
arr=np.array([[1, 2, 3], [4, 5, 6]])
t=torch.from_numpy(arr)
print("numpy array:", arr)
print("tensor:", t)
print(“\n修改arr")
arr[0, 0]=0#把arr第一个元素改为0
print("numpy array:", arr)
print("tensor:", t)
print("\n修改tensor")
t[0, 0]=-1
print("numpy array:", arr)
print("tensor:", t)
2.3.Tensor创建二:依据数值创建
2.3.1torch.zeros()
torch.zeros(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
功能:依size创建全0张量
size:张量的形状,如(3,3)、(3,224,224)
out:输出的张量
layout:内存中布局形式,有strided(默认值一般用这个),sparse_coo(稀疏矩阵才用这个,会提高读取效率)等
device:所在设备,gpu/cpu
requires_grad:是否需要梯度
#通过torch.zeros创建张量
flag=True
#flag=False
if flag:
out_t=torch.tensor([1])
t=torch.zeros((3, 3), out=out_t)#参数里的out是将3*3的一个全零矩阵的地址给了out-t,t和out是一个内存空间的两个不同的命名
print(t, '\n', out_t)
print(id(t), id(out_t), id(t)== id(out_t))
2.3.2 torch.ones_like()
功能:依input形状创建全1张量
·size:张量的形状,如(3,3)、(3,224,224)
·dtype:数据类型
·layout:内存中布局形式
·device:所在设备,gpu/cpu
·requires_grad:是否需要梯度
torch. ones_like(input, dtype=None,layout=None, device=None, requires_grad=False)
2.3.3 torch.full()和 torch.full_like()
功能:依input形状创建全0张量
·size:张量的形状,如(3,3)
·fill_value:张量的值
torch. full(size, fill_value, out=None, dtype=None,layout=torch. strided, device=None, requires_grad=False)
#通过torch.full创建全10张量
flag=True
#flag=False
if flag:
t=torch.full((3,3), 10)
print(t)
2.3.4 2.7 torch.arange()
功能:创建等差的1维张量
注意事项:数值区间为[start,end)
·start:数列起始值
·end:数列“结束值”
·step:数列公差,默认为1
torch. arange(start=e, end, step=1, out=None, dtype=None,layout=torch. strided, device=None, requires_grad=False)
#通过torch.arange创建等差数列张量
flag=True
#flag=False
if flag:
t=torch.arange(2, 10, 2)
print(t)
2.3.5 torch.linspace()
功能:创建均分的1维张量
注意事项:数值区间为[start,end]
·start:数列起始值
·end:数列结束值
·steps:数列长度,注意这里不是长度,不是步长。
torch. linspace(start, end, steps=100, out=None, dtype=None, layout=torch. strided, device=None, requires_grad=False)
#通过torch.linspace创建均分数列张量
flag=True
#flag=False
if flag:
t=torch.linspace(2, 10, 6)
print(t)
2.3.6 torch.logspace()
功能:创建对数均分的1维张量
注意事项:长度为steps,底为base
·start:数列起始值
·end:数列结束值
·steps:数列长度
·base:对数函数的底,默认为10
2.3.7 torch.eye()
功能:创建单位对角矩阵(2维张量)
注意事项:默认为方阵
·n:矩阵行数
·m:矩阵列数
2.4.Tensor创建三:依据概率创建
2.4.1 torch.normal()
功能:生成正态分布(高斯分布)
·mean:均值。
·std:标准差
torch. normal(mean, std, out=None)
四种模式:
mean为标量,std为标量(参数多一个:size)
mean为标量,std为张量
mean为张量,std为标量(可以用来初始化权重)
mean为张量,std为张量
2.4.2 torch.randn()和 torch.randn like()
功能:生成标准正态分布
·size:张量的形状
torch.randn(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
2.4.3torch.randint()和torch.randint_like()
功能:区间[low,high)生成整数均匀分布
·size:张量的形状
2.4.4 torch.randperm()
功能:生成生成从0到n-1的随机排列
·n:张量的长度
2.4.5 torch.bernoulli()
功能:以input为概率,生成伯努力分布(0-1分布,两点分布)
·input:概率值