torch.nn.module学习笔记

pytorch官网 Tutorials > Deep Learning with PyTorch: A 60 Minute Blitz > Neural Networks部分,关于Define the network代码
1. maxpooled为什么写在forward()方法中而不是Net类构造函数里?
分析:池化层也可以写在构造函数中。

2. 如图,输入图像转化为数据后size为32×32,其中Conv2d参数为(1, 6, kernel_size=(3, 3), stride=(1, 1)),padding 默认为0,根据计算卷积后的size应为30×30,为什么是28×28??
猜测:此处卷积核的size应该为5*5,代码部分与示例图采用的数据不同。

3.torch.tensor.view(*shape)方法中参数的含义,类似numpy的reshape()
view(-1, a, ...):官方文档解释为:the size -1 is inferred from other dimensions-1的大小是由其他维度推断来的。可以理解为-1是未知的某个整数,根据reshape前后数据不变以及其他维度的size,计算-1所在维度的size。

t = torch.rand(4,4)  # t的size为[4,4]
b = t.view(-1, 2)  # 4*4/2=8 b的size为[8,2]

a = torch.ones(4,4,6)  # a的size为[4,4,6]
b = a.view(-1, 3, 2) # 4*4*6=96,96/3/2=16. b 的size为[16,3,2]

c = torch.randn(8,2)  #  c.size()  [8,2]
c = c.view(1,-1)   # c.size()   [1,16]

4. 创建optimizer对象

optimizer = optim.SDG(model.parameters(), lr=0.01, momentum=0.9)

创建SGD优化器对网络中的所有参数均设置0.01的学习率,0.09的动量。SGD的arguments如下图:

SGD的args
Optimizer也支持对每一个参数设置options(除params之外的arguments,如lr, momentum)。在这种情况下,第一个argargument为迭代器,通常是字典列表,而字典的键名就是优化器的arguments。
字典样例:期望卷积层conv1的参数学习率为1e-5,那么在迭代器中添加{'params': model.conv1.parameters(), 'lr': 1e-5}
就相当于将“关键字实参”变成键值对的形式。

optimizer = optim.SGD([
					  		{'params': model.base.parameters()}, 
					  		{'params': model.classifier.parameters(),'lr':1e-3}
						],lr=1e-2, momentum=0.9)

当然,仍然可以传递关键字实参,作为没有重写options的parameters的默认值。上例中model.base层参数将使用默认的学习率1e-2,model.classifier层参数的学习率为1e-3,所有参数的动量均为0.9

注意

  • torch.nn仅支持mini-batch输入,不支持单个样本的输入。所以input第一维总是batchsize
  • 接收输入时,直接output = net(input)即可,无需output = net.forward(input)。因为在nn.module的源码__call__方法中调用了forward()方法,而net(input)等价于net.__call__(input)。至于__call__方法的更多作用即用法见参考1。
    __call__调用forward()
  • optimizer.step()功能是执行一个优化步骤(比如参数更新)。因为优化方法不同,代码实现也有差异,所以在基类Optimizer中没有具体实现,由每个优化器子类(SGD,Adam,LBFGS等)重写step方法。

参考

  1. https://www.jianshu.com/p/e1d95c4e1697?utm_source=oschina-app
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值