01.PyTorch简介及环境配置;基础数据结构——张量


本课程来自深度之眼deepshare.net,部分截图来自课程视频。

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.3.Pycharm安装

Pycharm——强大的python IDE,拥有调试、语法高亮、Project管理、代码跳转、智能提示、版本控制等功能。
安装步骤:
1.官网下载安装包https://www.jetbrains.com/pycharm/
2.运行pycharm-professional-2019.2.exe
3.选择路径,勾选Add launchers dir to the PATH,等待安装完成激活步骤:
1.下载破解文件:https://pan.baidu.com/s/112tS3XjAENIHaJ-aSCe0dA#list/path=%2F
2.将jetbrains-agent.jar放到pycharm安装目录中\bin文件夹
3.创建空项目,点击菜单Help->Edit Custom VM Properties…
在pycharm64.exe.vmoptions中最后一行添加命令-javaagent:安装目录\jetbrains-agent.jar
在这里插入图片描述
4.重启,点击Help->Register,然后选下面的选项
在这里插入图片描述
server address填
http://jetbrains-license-server
完成激活
有edu邮箱的可以用edu邮箱免费激活教育版。

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

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oldmao_2000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值