首页 科普 资讯 养生 问答 找医院 相关问答
首页> 问答

万字详解pytorch基础语法(二)

发布网友 发布时间:1小时前

我来回答

1个回答

热心网友 时间:1小时前

前篇传送门:4 张量操作

4.1 拼接

torch.cat()

功能:将张量按维度dim进行拼接,不会扩充张量的维度。

● tensors:张量序列

● dim:要拼接的维度

torch.stack()

功能:在新创建的维度dim上进行拼接,会扩充张量的维度。

● tensors:张量序列

● dim:要拼接的维度

4.2 切分

torch.chunk()

功能:将张量按维度dim进行平均切分。

返回值:张量列表。

注意事项:若不能整除,最后一份张量小于其他张量。

● input:要切分的张量

● chunks:要切分的份数

● dim:要切分的维度

torch.split()

功能:将张量按维度dim进行切分。

返回值:张量列表。

● tensor:要切分的张量

● split_size_or_sections:为int时,表示每一份的长度;为list时,按list元素切分

● dim:要切分的维度

4.3 比较

torch.ge(),torch.gt(),torch.le(),torch.lt()

功能:input中逐元素与other进行比较,满足:ge >=; gt >; le <=; lt

返回值:与input同形状的布尔类型张量。

● input:被比较的张量

● other:可以是张量,数值,布尔,input中逐元素与其进行比较

4.4 索引

torch.index_select()

功能:在维度dim上,按index索引数据。

返回值:索引得到的数据拼接的张量。

● input:要索引的张量

● dim:要索引的维度

● index:要索引数据的序号组成的张量,dtype须为torch.long

torch.masked_select()

功能:按mask中的True进行索引,常用来筛选数据。

返回值:一维张量,符合要求的所有数值。

● input:要索引的张量

● mask:与input同形状的布尔类型张量

4.5 变换

torch.reshape()

功能:变换张量形状。

注意事项:当张量在内存中是连续的时,新张量与input共享数据内存。这种共享与out不同,out是整个tensor都共享内存,相当于别名;reshape是仅data共享内存。改变一个张量的数据,另一个张量会跟着改变。

● input:要变换的张量

● shape:新张量的形状,新张量与原张量乘积相等

-1表示不需要关心该维度,根据其他维度计算。

torch.transpose()

功能:交换张量的两个维度。在图像的预处理中常用,有时读取的图像数据是 (c, h, w),但是我们常用的是 (h, w, c),就需要用此方法把channel和width变换,再把width和height变换。

● input:要变换的张量

● dim0:要交换的维度

● dim1:要交换的维度

torch.t()

功能:2维张量转置,对矩阵而言,等价于torch.transpose(input, 0, 1)。

torch.squeeze()

功能:压缩长度为1的维度(轴)。

● dim:若为None,移除所有长度为1的轴;若指定维度,当且仅当该轴长度为1时,可以被移除。

torch.unsqueeze()

功能:依据dim扩展维度。

● dim:扩展的维度

4.6 数学运算

加减乘除

对数,指数,幂函数

三角函数

绝对值

torch.add()

功能:逐元素计算[公式],因为深度学习中经常用到先乘后加的操作,所以增加了此功能,可以使代码更加整洁。

● input:第一个张量

● alpha:乘项因子

● other:第二个张量

torch.addcdiv()

功能:逐元素计算[公式],优化过程中常用。

torch.addcmul()

功能:逐元素计算[公式],优化过程中常用。

5 线性回归

概念:线性回归是分析一个变量与另外一或多个变量之间关系的方法。

求解步骤:

LR为步长,学习率

6 计算图与动态图机制

6.1 计算图

计算图是用来描述运算的有向无环图。计算图的好处是运算更加简洁,求导更加方便。

计算图有两个主要元素:结点(Node) 和边(Edge)。

● 结点表示数据,如向量,矩阵,张量;

● 边表示运算,如加减乘除卷积等。

用计算图表示:[公式],拆分成 [公式]

[公式]

代码验证:

叶子结点:用户创建的结点,如上图中的X与W,梯度反向传播之后,非叶子节点的梯度会被释放掉,可以节省内存。若想使用非叶子节点的梯度,可以用 retain_grad()。

● torch.Tensor中的属性,is_leaf:指示张量是否为叶子结点

● grad_fn:记录创建该张量时所用的方法(函数),在梯度反向传播是用到

● y.grad_fn =[公式]MulBackward0[公式],乘法得到

● a.grad_fn =[公式]AddBackward0[公式],加法得到

● b.grad_fn =[公式]AddBackward0[公式]

6.2 动态图机制

动态图 vs 静态图

根据计算图搭建方式,可将计算图分为动态图和静态图

PyTorch采用的是动态图机制,每一次训练,都会销毁计算图并重新创建,这样做花销很大,但是更加灵活。

TensorFlow采用的是静态图机制,一旦定义,训练时就不能修改。一开始就要搭建好计算图,然后才能进行数据的传输和计算,这意味着写代码过程中,错误将更加难以发现,因为搭建图的过程中不会报错,所以不知道错在哪里,只有在传入数据的过程中才能发现哪里出错,灵活性低,而且出现bug也不易调试。

7 autograd - 自动求导系统

深度学习模型的训练,就是不断更新权值,权值的更新需要求解梯度,求解梯度十分繁琐,PyTorch提供自动求导系统,我们只要搭建好前向传播的计算图,就能获得所有张量的梯度。

7.1 torch.autograd.backward()

功能:自动求取梯度。

● tensors:用于求导的张量,如 loss

● retain_graph:保存计算图,由于PyTorch采用动态图机制,在每次反向传播之后计算图都会释放掉,如果还想继续使用,就要设置此参数为True

● create_graph:创建导数计算图,用于高阶求导

● grad_tensors:多梯度权重,当有多个loss需要计算梯度时,需要设置每个loss的权值

示例1:y.backward()与torch.autograd.backward()的关系

调试:

在 y.backward() 处设置断点,step into进入函数

可以看到张量中的类方法只有一行,说明 y.backward() 直接调用了torch.autograd.backward()方法。

点击单步调试 step over 返回 y.backward(),停止调试。

示例2:retain_graph,保存计算图

多次执行y.backward()会报错,因为计算图被释放,解决方法是第一次反向传播时,设置y.backward(retain_graph=True)

示例3:grad_tensors,多梯度权重

[公式]

7.2 torch.autograd.grad()

功能:求取梯度。

● outputs:用于求导的张量,如上例中的 loss

● inputs:需要梯度的张量,如上例中的w

● create_graph:创建导数计算图,用于高阶求导

● retain_graph:保存计算图

● grad_outputs:多梯度权重

示例:计算[公式] 的二阶导数

7.3 小贴士

1、梯度不自动清零,在每次反向传播中会叠加

这导致我们得不到正确的结果,所以需要手动清零

这里zero后接下划线_,表示原位(in-place)操作。

2、依赖于叶子结点的结点(如上例中的a和b),requires_grad默认为True,因为叶子结点梯度的计算与该节点有关

可以看出虽然只针对x和w设置了requires_grad,但a,b,y也均为True

3、叶子结点不可执行in-place,因为前向传播记录了叶子节点的地址,反向传播需要用到叶子节点的数据时,要根据地址寻找数据,执行in-place操作改变了地址中的数据,梯度求解也会发生错误。

in-place操作,即原位操作,在原始内存中改变这个数据,方法后接_代表in-place操作

8 逻辑回归

逻辑回归是线性的二分类模型。

模型表达式:[公式]

[公式] 称为Sigmoid函数,也称为 Logistic 函数,作用是将输入数据映射到[0, 1]之间。

二分类方法

[公式]

假如没有激活函数[公式],单纯用 [公式],其实也可以进行二分类,对应图像可以看出,[公式] 时判别为类别1,[公式] 0时判别为类别0。为了更好的描述分类置信度,所以采用Sigmoid函数将输出映射到 [公式],符合概率取值。

逻辑回归也叫对数几率回归,几率就是[公式],其中[公式]为概率,表示样本x为正样本的可能性。对几率取对数,就得到了对数几率 [公式]。线性回归 [公式] 是用 [公式] 去拟合 [公式],[公式] 为逻辑回归模型表达式的恒等变形,是用[公式]去拟合对数几率, 因此叫做对数几率回归。

9 机器学习的训练步骤

9.1 数据

● 数据收集:收集原始样本和标签,如Img和Label。

● 数据划分:划分成训练集train,用来训练模型;验证集valid,验证模型是否过拟合,挑选还没有过拟合的时候的模型;测试集test,测试挑选出来的模型的性能。

● 数据读取:PyTorch中数据读取的核心是Dataloader。Dataloader分为Sampler和DataSet两个子模块。Sampler的功能是生成索引,即样本序号;DataSet的功能是根据索引读取样本和标签。

● 数据预处理:数据的中心和,标准化,旋转,翻转等,在PyTorch中是通过transforms实现的。

9.2 选择模型

根据任务的难易程度选择简单的线性模型或者复杂的神经网络模型。

9.3 损失函数

根据不同的任务选择不同的损失函数,比如线性回归中选择均方差损失函数,分类选择交叉熵。

9.4 优化器

有了loss就可以求取梯度,得到梯度,用优化器更新权值。

9.5 迭代训练

反复训练的过程
德州晏城有没有京东航空 J D V A 02319450101这是个什么物流单号谁的? 德州晏城京东分拣中心正常运行吗 制药工程专业女生,应聘药企qa,qc等工作是比较好的选择吗? 药物制剂,毕业能就什么职业,要详细,工资水平? 药学女生在药企做QC怎么样 考驾证的小技巧 央视赈灾直播 用的地图模型是什么? 中央电视台用的地图软件 新浪植物大战僵尸ol非RMB应该练什么植物 微方摄像头软件搜不到监控头 华为系统卡住了 卡了好久了 一直是0% 华南理工大学图书馆的理工大学教材供应中心 江西工程职业学院岗位设置 求助小天鹅洗衣机TB60-X3268出现E3故障代码 竖直角指标差的计算方法 糖友健康吃外食 哪些原则要遵守? 如图,在正方形ABCD中,点E,F分别在BC,CD上移动, 但A到EF的距离AH始终保持... 在正方形abcd中 e f分别是bc cd上移动,A到EF的长度AH等于AB,E,F在移动... 如图,正方形ABCD的边长为A,E是边BC上的动点,且∠EAF=45°.△ECF的周长... ...E,F分别在BC,DC上且∠EAF=45°求三角形ECF的周长 正方形ABCD中,E,F分别为Bc,cD上的点,LEAF=45○,△EcF周长为4,正方形ABc... 如图所示,在正方形ABCD中,E,F分别是边BC,CD上的点,∠EAF=45°,△ECF的... ...是BC、CD上的点,角EAF等于45度,三角形ECF的周长为a则正方形ABCD的边... 炒股交易手续费怎么算? 社会消费品零售总额反映什么问题社会消费品零售总额反映什么 我的头发发质很软 不想每天做头发 是烫发根还是怎么 就能让头发蓬起来... ...的时候如果想让软化完头顶的头发能蓬起来一些,应该可以做到吧?那... 我拿建设银行卡在邮政夸行转给农业银行可不可以 ...银行卡在自助取款机上可不可以跨行转账到农业银行卡上。可以的话手 ... 邮政银行卡转农业银行卡帐号怎么转(在自动取款上转) 邮政卡自助取款机内给外省农业银行卡转账需要多久到账 请问广州D1857在广州哪个站 薄壁不锈钢管什么型号的氩弧焊机能焊 韶关常年平均温度是多少 ...的化工原料。(1)电解饱和食盐水可以得到多种化工产品,主要过程如下... ...其设备示意图如图:(1)图1是离子交换膜法(允许钠离子通过, 珠子什么材质的比较好 办理委托手续时应注意什么? 民本中学是一类还是二类 注册公司要多久-法律知识 新疆石河子市东城街道车牌号开头字母是什么? 石河子大学和沈阳农业大学哪个好 志愿档案未投出是什么意思? 腰椎腰1压缩性骨折伴圆锥马尾神经损伤 什么是高考志愿档案未投出啊? 小女子最近想入手一台相机,不知道买单反还是微单好。不知各位大侠有好... 情人节电影有哪些想戴女朋友一起去看的大片 为何专家分析今年春运天气不会现08年情况 ...bin编码,再通过phpmyadmin导入时,显示的总是乱码,怎么办? 同学,你需要一个狗屁不通文章生成器么 ...我想在本网页内的一个表格内显示另外一个网页,代码怎么写_百度... ...而苦恼,一个周末,他的父亲带着他去爬山在爬山的过程中, ...参数.X1,X2,...,Xn为来自该总体的一个样本, ...个程序,我的想法是用单选框,就是那个小原点 皮包被划破了怎么补救 每天读点好英文 一共多少本? 关于摘抄的优美句子(优美句子经典——记忆中的美好) 求《每天读一点英文:那些给我勇气的句子》 中英文文本以及音频文件... 那些给我勇气的句子内容简介 我是2018年2月24号初次领到B照驾驶证,请问我要哪时才可以增A照? 高中读后感500字:《巧媳妇搬石头》 海岛奇兵内购破解,链接或者网址百度云都可以 迄今为止世界上发现的最大青铜器 世界上最大的青铜器叫什么名 农民怎样把农产品送入超市,需要哪些程序? (急)怎样推销水果? 如果因为信用卡不小心进了黑名单,急需用钱的时候而无法借到正规公司的... 我就搞不懂了,为什么有些人的嘴巴就那么大 女人为什么嘴都很大啊? 早上起床脑子疼,还恶心想吐,已经吐出一些胃酸。请问是怎么回事... 第一天胃痛胃痉挛,拉肚子;第二天胸闷,胸口痛.伴有轻微胃痛.麻烦专家... 我原来是在天心区社保中心办理的灵活就业人员养老保险和医保,现在要... ...长沙天心区职工要一次缴多少钱,每月能领多少养老金? 交了雨花区灵活就业社保可以转到天心区的灵活就业社保吗? ...现在单位要给我买社保,怎么会出现天心区灵活就业人员的单位,现在要... 爱情自有天意第77集里面程曦与唐正摔倒项链缠在一起时的背景音乐_百度... 披萨怎么做家庭做法(披萨怎么做家庭做法空气炸锅烤披萨) 如何做披萨用电饼铛 专本套读需要花多少钱 知道银行或存折卡号就能到柜台存钱了吗?不需要带存折或卡吗? 个体户营业执照过期了还能申请收款二维码吗? 营业执照过期了收款码收到了钱怎么办 2o16年看开学第一天读后感 关于2016年开学第一天的观后感六百字主持人是撒贝宁 开学第一课观后感600字,help!!! 铸造全瓷牙的专家求解答,哪种全瓷牙辐射最小?铸瓷、二氧化镐、二氧化铝... wowit'sbeautifu|!是什么意思 借款需要什么牌照 放贷牌照叫什么
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com