文章目录

  • 二、循环神经网络层
  • 三、损失函数(Loss Function)
  • 四、优化器

关于深度学习的一些理解的参考链接:
https://www.cnblogs.com/bamtercelboo/p/7469005.html
#一、 基础知识
##1)激活函数

sigmoid和tanh函数的导数都是原函数的函数。这样,我们一旦计算原函数的值,就可以用它来计算出导数的值。

二、循环神经网络层

##1)LSTM

t.manual_seed(1000)input=V(t.randn(2,3,4))
print('input:')print(input)
lstm=nn.LSTM(4,3,1)
h0=V(t.randn(1,3,3))
c0=V(t.randn(1,3,3))
out,hn=lstm(input, (h0,c0))
print('out:')
print(out)

结果:

input:
tensor([[[-0.5306, -1.1300, -0.6734, -0.7669],[-0.7029,  0.9896, -0.4482,  0.8927],[-0.6043,  1.0726,  1.0481,  1.0527]],[[-0.6424, -1.2234, -1.0794, -0.6037],[-0.7926, -0.1414, -1.0225, -0.0482],[ 0.6610, -0.8908,  1.4793, -0.3934]]])
out:
tensor([[[-0.3610, -0.1643,  0.1631],[-0.0613, -0.4937, -0.1642],[ 0.5080, -0.4175,  0.2502]],[[-0.0703, -0.0393, -0.0429],[ 0.2085, -0.3005, -0.2686],[ 0.1482, -0.4728,  0.1425]]])

##2)LSTMCell

t.manual_seed(1000)
input=V(t.randn(2,3,4))
print('input:')print(input)
lstm=nn.LSTMCell(4,3)
hx=V(t.randn(3,3))
cx=V(t.randn(3,3))
out=[]
for i_ in input:hx,cx=lstm(i_, (hx,cx))out.append(hx)print('out:')
print(out)

结果:

input:
tensor([[[-0.5306, -1.1300, -0.6734, -0.7669],[-0.7029,  0.9896, -0.4482,  0.8927],[-0.6043,  1.0726,  1.0481,  1.0527]],[[-0.6424, -1.2234, -1.0794, -0.6037],[-0.7926, -0.1414, -1.0225, -0.0482],[ 0.6610, -0.8908,  1.4793, -0.3934]]])
out:
[tensor([[-0.3610, -0.1643,  0.1631],[-0.0613, -0.4937, -0.1642],[ 0.5080, -0.4175,  0.2502]]), tensor([[-0.0703, -0.0393, -0.0429],[ 0.2085, -0.3005, -0.2686],[ 0.1482, -0.4728,  0.1425]])]

三、损失函数(Loss Function)

在深度学习中要用到各种各样的损失函数,这些损失函数可看做是一种特殊的layer, Pytorch也将这些损失函数专门提取出来,作为独立的一部分。
这里以交叉熵损失CrossEntripyliss为例:

#batchsize=3  计算对应每个类别的分数(只有两个类别0, 1)
score=V(t.randn(3,2))
#三个样本分别属于1,0,1类,label必须是LongTensor
label=V(t.Tensor([1,0,1])).long()#loss与普通的layer无差异
criterion=nn.CrossEntropyLoss()
loss=criterion(score,label)
loss

结果:

tensor(0.8908)

四、优化器

Pytorch将深度学习中所有的优化方法都封装在**torch.optim**中,其设计十分灵活,能够很方便地扩展成自定义的优化方法。

所有的优化方法都是继承基类optim.Optimizer, 并实现了自己的优化步骤。
下面以最基本的 优化方法——随机梯度下降法(SGD)举例说明。
这里需要掌握:

  1. 优化方法的基本使用方法;
  2. 如何对模型的不同部分设置不同的学习率;
  3. 如何调整学习率
from torch import optim
import torch as t
from torch import nn
from torch.autograd import Variable as V#首先定义一个Lenet网络
class Net(nn.Module):def __init__(self):super(Net,self).__init__()self.features=nn.Sequential(nn.Conv2d(3,6,5),nn.ReLU(),nn.MaxPool2d(2,2),nn.Conv2d(6,16,5),nn.ReLU(),nn.MaxPool2d(2,2))self.classifier=nn.Sequential(nn.Linear(16*5*5, 120),nn.ReLU(),nn.Linear(120, 84),nn.ReLU(),nn.Linear(84, 10),)def forward(self,x):x=self.features(x)x=x.view(-1,16*5*5)x=self.classifier(x)return xnet=Net()
optimizer=optim.SGD(params=net.parameters(), lr=1)
optimizer.zero_grad()   #梯度清零等价于net.zero_grad()input=V(t.randn(1,3,32,32))
output=net(input)
output.backward(output)optimizer.step()  #执行优化
#为不同的子网络设置不同的学习率,在finetune中经常用到
#如果对某个参数不指定学习率,就使用默认的学习率
optimizer=optim.SGD([{'params':net.features.parameters()},{'params':net.classifier.parameters()}], lr=1e-5)
#只在全连接层设置较大的学习率,其余层设置较小的学习率
special_layers=nn.ModuleList([net.classifier[0], net.classifier[3]])
special_layers_params=list(map(id, special_layers.parameters())
base_params = filter(lambda p:id(p) not in special_layers_params, net.parameters())optimizer=t.optim.SGD([{'params':base_params},{'params':special_layers.parameters(),'lr':0.01}
], lr=0.01)

调整学习率的方法主要有两种。
一种是修改optimizer.params_groups 中对应的学习率,另一种是新建优化器(更简单也是更推荐的做法)。由于optimizer十分轻量级,构建开销很小,故可以构建新的optimizer.
但是构建新的优化器会重新初始化动量等状态信息,这对使用动量的优化器来说(如带momentum的sgd),可能会造成损失函数在收敛过程中出现 震荡。

#调整学习率 新建一个optimizer
old_lr=0.1
optimizer=optim.SGD([{'params':net.features.parameters()},{'params':net.classifier.parameters(),'lr':old_lr*0.1}
],lr=1e-5)

Pytorch——循环神经网络层、损失函数、优化器相关推荐

  1. pytorh 激活函数,循环神经网络层,损失函数和优化器

    激活函数 PyTorch实现了常见的激活函数,其具体的接口信息可参见官方文档,这些激活函数可作为独立的layer使用.这里将介绍最常用的激活函数ReLU,其数学表达式为: R e L U ( x ) ...

  2. PyTorch主要组成模块 | 数据读入 | 数据预处理 | 模型构建 | 模型初始化 | 损失函数 | 优化器 | 训练与评估

    文章目录 一.深度学习任务框架 二.数据读入 三.数据预处理模块-transforms 1.数据预处理transforms模块机制 2.二十二种transforms数据预处理方法 1.裁剪 2. 翻转 ...

  3. 【Pytorch学习笔记三】Pytorch神经网络包nn和优化器optm(一个简单的卷积神经网络模型的搭建)

    文章目录 一, 神经网络包nn 1.1定义一个网络 1.2 损失函数 二.优化器 nn构建于 Autograd之上,可用来定义和运行神经网络, PyTorch Autograd 让我们定义计算图和计算 ...

  4. 【PyTorch基础教程9】优化器optimizer和训练过程

    学习总结 (1)每个优化器都是一个类,一定要进行实例化才能使用,比如: class Net(nn.Moddule):··· net = Net() optim = torch.optim.SGD(ne ...

  5. Pytorch基础(十)——优化器(SGD,Adagrad,RMSprop,Adam,LBFGS等)

    一.概念 Pytorch中优化器的目的:将损失函数计算出的差值Loss减小. 优化过程:优化器计算网络参数的梯度,然后使用一定的算法策略来对参数进行计算,用新的参数来重新进行训练,最终降低Loss. ...

  6. pytorch中的学习率与优化器【lr_scheduler与optimizer】

    pytorch中优化器的使用流程大致为: for input, target in dataset:optimizer.zero_grad()output = model(input)loss = l ...

  7. PyTorch的损失函数和优化器

    文章目录 PyTorch的损失函数和优化器 损失函数 优化器 总结 PyTorch的损失函数和优化器 损失函数 一般来说,PyTorch的损失函数有两种形式:函数形式和模块形式.前者调用的是torch ...

  8. pytorch梯度下降函数_Pytorch中常用的四种优化器SGD、Momentum、RMSProp、Adam

    来源:AINLPer微信公众号 编辑: ShuYini 校稿: ShuYini 时间: 2019-8-16 引言     很多人在使用pytorch的时候都会遇到优化器选择的问题,今天就给大家介绍对比 ...

  9. 系统总结深度学习的主要的损失函数和优化器

    本次博客是深度学习的作业:系统总结了深度学习中监督学习的主要的损失函数,并指出各自的适应条件和优缺点.觉得很有意义,就记录下来供大家参考. 文章目录 损失函数 损失函数的作用 损失函数的分类 基于距离 ...

  10. pytorch 优化器

    深度学习五个步骤:数据 --> 模型 --> 损失函数 --> 优化器 --> 迭代训练,通过前向传播,得到模型的输出和真实标签之间的差异,也就是损失函数,有了损失函数之后,模 ...

最新文章

  1. Unity 2D物体移动
  2. Win7 Vista下的输入法问题
  3. 数据结构与算法(C++)– 队列(Queue)
  4. 1562: 比较大小(思维)
  5. 日常电脑小工具编程_如何使编程成为日常习惯
  6. mysql-聚合函数
  7. linux 压缩权限,linux的基本操作(归档压缩,用户、权限管理,远程服务器构建和vi编辑器)...
  8. 两种方法清空memcache
  9. linux ftp下载geo,GEO数据下载及处理详细过程
  10. Smobiler控件的使用:ListView的数据绑定及实现多选
  11. 人人网登陆(selenium、PtantomJS结合)
  12. Python 将tif文件分割成多个小tif
  13. Linux环境变量PSI指什么,psi是什么单位?
  14. 多多视频带货快速出单小技巧!
  15. 如何查询快递单号物流
  16. HP 1022N 网络打印机安装步骤
  17. 计算机教师培训感悟反思,教学工作反思感悟
  18. freeCAD学习笔记二:复制与放置多个相似的实体
  19. Webstorm2018激活和汉化
  20. JavaScript小技能:语言特点

热门文章

  1. docker跑codalab_Codalab使用与采坑
  2. 内存中的 html 网页,网页制作使用html-webpack-plugin'入再内存中生成 html 页面插件...
  3. pythonsys用法_Python 使用sys模块
  4. TypeScript:函数进阶
  5. CSS:实现跳动小球蒙版效果
  6. CSS:实现流光按钮类
  7. php httputils,Android 自定义网络加载工具类 HttpURLConnectionUtils
  8. 标定_基于全景基础设施的多摄像机和3D激光雷达校准
  9. 深度学习笔记_基本概念_神经网络中的epoch、batch_size和iteration
  10. 论文笔记_S2D.70_2021_IEEE-RAL_CodeMapping:使用紧凑场景表示的稀疏SLAM的实时稠密建图