Pytorch学习(三)---神经网络工具箱和优化器

一、神经网络工具箱nn

1、nn.Module

nn.Module是nn的一个核心数据结构,它可以是神经网络的某个层,也可以是包含多层的神经网络。在实际使用中,最常见的做法是继承nn.Module,生成自己的网络/层。nn中已经实现了绝大多数层,包括全连接层、损失层、激活层、卷积层、循环层等,这些都是nn.Module的子类,能够自动检测到自己的Parameter,并将其作为学习参数,且针对GPU运行进行了cuDNN优化。

2、nn.functional

nn中的层,一类是继承了nn.Module,其命名一般为nn.Xxx(第一个是大写),如nn.Linear、nn.Conv2d、nn.CrossEntropyLoss等。另一类是nn.functional中的函数,其名称一般为nn.functional.xxx,如nn.functionallinear、nn.functional.conv2d等。
从功能来说两者相当,基于nn.Module能实现的层,使用nn.functional也可以实现,反之亦然。
Pytorch官方推荐:具有学习参数的,例如linear,conv2d,batch_norm,采用nn.Xxx方式。没有学习参数的,例如maxpool,loss func,activation func等根据个人选择使用二者皆可。

二、优化器

Pytorch常用的优化方法都封装在torch.optim里面,其设计灵活,可以扩展为自定义的优化方法。所有的优化方法都是继承了基类optim.Optimizer。
使用优化器的一般步骤为:
1.建立优化器实例
导入optim模块,实例化SGD优化器

import torch.optim as optim
optimizer = optim.SGD(model.parameters(),lr=lr,momentum=momentum)

2.前向传播
把输入数据传入神经网络Net实例化对象model中,自动执行forward函数,得到out输出值,然后out与标记label计算损失值loss。

out = model(img)
loss = criterion(out,label)

3.清空梯度
缺省情况下题都是累加的,在提督反响传播前,先需把梯度清零。

optimizer.zero_grad()

4.反向传播
给予损失值,把梯度之进行反向传播

loss.backward()

5.更新参数
基于当前梯度(存储在参数的.grad属性中)更新参数

optimizer.step()

3.动态修改学习率参数

直接采用修改参数optimzer.param_groups。
optimzer.param_groups:长度为1的list,optimzer.param_groups[0]:长度为6的字典,包括权重参数、lr、momentum等参数。

print(len(optimizer.am_groups[0]))#结果为6

例:

for epoch in range(num_epoched):par
    #动态修改参数学习率
    if epoch%5 = 0:
        optimizer.am_groups[0])['lr'] *=0.1

    for img,label in train_loader:
    #######
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值