文章目录

  • 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版

pytorch不运行但占用内存 pytorch需要多大内存_数据结构


李飞飞老师得意门生Andrej Karpathy大神(斯坦福的cs2331n最开始是他上的,现在在特斯拉任职)做的一个图(2014年10月至2018年02月arXiv论文中深度学习框架提及次数统计),说明了一个趋势:

PyTorch的增长速度与TensorFlow一致

2019年3月各深度学习框架在GitHub上的Start,Forks,Watchers和Contributors数量对比

pytorch不运行但占用内存 pytorch需要多大内存_pytorch不运行但占用内存_02

PyTorch优点

·上手快:掌握Numpy和基本深度学习概念即可上手
·代码简洁灵活:用nn.module封装使网络搭建更方便;基于动态图机制,更灵活
·Debug方便:调试PyTorch就像调试Python代码一样简单
·文档规范:https://pytorch.org/docs/可查各版本文档
·资源多:arXiv中的新算法大多有PyTorch实现
·开发者多:GitHub上贡献者(Contributors)已超过1100+
·背靠大树:FaceBook维护开发

适合人群

·深度学习初学者:模型算法实现容易,加深深度学习概念认识
·机器学习爱好者:数十行代码便可实现人脸识别,目标检测,图像生成等有趣实验
·算法研究员:最新arXiv论文算法快速复现

软件安装

Python包管理器
Python集成开发环境
PyTorch

解释器与工具包

解释器:将python语言翻译成机器指令语言

pytorch不运行但占用内存 pytorch需要多大内存_深度学习_03


工具包

工具包又称为依赖包、模块、库、包、python之所以强大是因为拥有大量工具包

内置包:os、sys、glob、re、math等

第三方包:pytorch,tensorflow,numpy等

pytorch不运行但占用内存 pytorch需要多大内存_python_04

虚拟环境(略)

各环境间相互独立,可随意切换

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是否安装成功的命令:

pytorch不运行但占用内存 pytorch需要多大内存_pytorch不运行但占用内存_05


2.2下载并解压缩CuDNN,把下面三个文件夹拷贝到cuda安装目录下。

pytorch不运行但占用内存 pytorch需要多大内存_pytorch不运行但占用内存_06


在demo_suite文件夹下测试是否安装成功

pytorch不运行但占用内存 pytorch需要多大内存_pytorch不运行但占用内存_07


还可以用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安装

pytorch不运行但占用内存 pytorch需要多大内存_深度学习_08


这里注意可以根据提示到相应网站直接下载文件后再装会快一点。

4.在pycharm中创建hello pytorch项目,运行脚本,查看pytorch版本

pytorch不运行但占用内存 pytorch需要多大内存_深度学习_09


这里运行报错,因为还没有导入torch的包,在pycharm最下面点Terminal输入下面的语句创建相应的虚拟环境。

pytorch不运行但占用内存 pytorch需要多大内存_pytorch不运行但占用内存_10


使用下面命令激活虚拟环境。

pytorch不运行但占用内存 pytorch需要多大内存_数据结构_11


然后跳转到torch包的目录,并用pip手动安装torch包。

pytorch不运行但占用内存 pytorch需要多大内存_深度学习_12


用同样的方式安装torchvision

然后点击菜单File->Setting把当前项目的解释器(interpreter)关联到新的虚拟环境中

pytorch不运行但占用内存 pytorch需要多大内存_pytorch不运行但占用内存_13


pytorch不运行但占用内存 pytorch需要多大内存_pytorch不运行但占用内存_14


pytorch不运行但占用内存 pytorch需要多大内存_数据结构_15


添加环境要显示隐藏文件夹,就是下面红圈的那个眼睛:

pytorch不运行但占用内存 pytorch需要多大内存_深度学习_16

2.1.Tensor概念

张量是一个多维数组,它是标量、向量、矩阵的高维拓展

pytorch不运行但占用内存 pytorch需要多大内存_python_17


pytorch不运行但占用内存 pytorch需要多大内存_python_18


pytorch不运行但占用内存 pytorch需要多大内存_数据结构_19

Tensor与Variable

Variable是torch.autograd中的数据类型主要用于封装Tensor,进行自动求导(Variable在0.4.0版本已经并入Tensor,但是仍然要了解Variable)

data:被包装的Tensor

grad:data的梯度

grad_fn:创建Tensor的Function,是自动求导的关键

requires_grad:指示是否需要梯度

is_leaf:指示是否是叶子结点(张量)

pytorch不运行但占用内存 pytorch需要多大内存_pytorch_20

Tensor

PyTorch0.4.0版开始,Variable并入Tensor

dtype:张量的数据类型,如 torch.FloatTensor,torch.cuda.FloatTensor

shape:张量的形状,如(64,3,224,224)

device:张量所在设备,GPU/CPU,是加速的关键

pytorch不运行但占用内存 pytorch需要多大内存_数据结构_21


给出两个常用的dtype

pytorch不运行但占用内存 pytorch需要多大内存_数据结构_22


pytorch不运行但占用内存 pytorch需要多大内存_python_23

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)

pytorch不运行但占用内存 pytorch需要多大内存_pytorch不运行但占用内存_24


torch.from_numpy(ndarray)

功能:从nunpy创建tensor

注意事项:从torch.from_numpy创建的tensor于原ndarray共享内存,当修改其中一个的数据,另外一个也将会被改动

pytorch不运行但占用内存 pytorch需要多大内存_数据结构_25

#通过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))

pytorch不运行但占用内存 pytorch需要多大内存_pytorch不运行但占用内存_26

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)

pytorch不运行但占用内存 pytorch需要多大内存_pytorch_27

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)

pytorch不运行但占用内存 pytorch需要多大内存_pytorch_28

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)

pytorch不运行但占用内存 pytorch需要多大内存_pytorch不运行但占用内存_29

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:概率值