pytorch文档阅读(三)torch.optim

通过torch.nn定义好网络结构以后就要使用一定的优化方法对网络进行训练了,这涉及到优化模块torch.optim

1.创建一个optimizer实例

注意事项:如果需要在GPU上训练,需要在创建optimizer之前就移动到GPU上,在创建optimizer时必须保证所有待优化变量都储存在一块连续的空间内。

optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
optimizer = optim.Adam([var1, var2], lr=0.0001)

分参数选项:

这是输入不是parameter,而是一个dict,通过一个key键值把parameters分成不同组,不同组的参数可以选用不同的训练参数

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

2.执行一步优化

有两种方式

1)optimizer.step()

一旦梯度算出来了,就可以紧接着用这个函数来优化参数

for input, target in dataset:
    optimizer.zero_grad()
    output = model(input)
    loss = loss_fn(output, target)
    loss.backward()
    optimizer.step()

2)optimizer.step(closure)

对于某些需要循环计算的优化方法,例如共轭梯度法、LBFGS等,需要定义一个closure闭环,这个闭环里要进行清空梯度、计算loss、返回loss

for input, target in dataset:
    def closure():
        optimizer.zero_grad()
        output = model(input)
        loss = loss_fn(output, target)
        loss.backward()
        return loss
    optimizer.step(closure)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值