当前位置: 首页 > news >正文

石家庄市建设局质监站网站百度地图轨迹导航

石家庄市建设局质监站网站,百度地图轨迹导航,php做网站与java做网站,查询网站内页关键词排名torch.optim的灵活使用详解1. 基本用法:要构建一个优化器Optimizer,必须给它一个包含参数的迭代器来优化,然后,我们可以指定特定的优化选项,例如学习速率,重量衰减值等。注:如果要把model放在GP…

torch.optim的灵活使用详解

1. 基本用法:

要构建一个优化器Optimizer,必须给它一个包含参数的迭代器来优化,然后,我们可以指定特定的优化选项,

例如学习速率,重量衰减值等。

注:如果要把model放在GPU中,需要在构建一个Optimizer之前就执行model.cuda(),确保优化器里面的参数也是在GPU中。

例子:

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

2. 灵活的设置各层的学习率

将model中需要进行BP的层的参数送到torch.optim中,这些层不一定是连续的。

这个时候,Optimizer的参数不是一个可迭代的变量,而是一个可迭代的字典

(字典的key必须包含'params'(查看源码可以得知optimizer通过'params'访问parameters),

其他的key就是optimizer可以接受的,比如说'lr','weight_decay'),可以将这些字典构成一个list,

这样就是一个可迭代的字典了。

注:这个时候,可以在optimizer设置选项作为关键字参数传递,这时它们将被认为是默认值(当字典里面没有这个关键字参数key-value对时,就使用这个默认的参数)

This is useful when you only want to vary a single option, while keeping all others consistent between parameter groups.

例子:

optimizer = SGD([

{'params': model.features12.parameters(), 'lr': 1e-2},

{'params': model.features22.parameters()},

{'params': model.features32.parameters()},

{'params': model.features42.parameters()},

{'params': model.features52.parameters()},

], weight_decay1=5e-4, lr=1e-1, momentum=0.9)

上面创建的optim.SGD类型的Optimizer,lr默认值为1e-1,momentum默认值为0.9。features12的参数学习率为1e-2。

灵活更改各层的学习率

torch.optim.optimizer.Optimizer的初始化函数如下:

__init__(self, params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)

params (iterable): iterable of parameters to optimize or dicts defining parameter groups (params可以是可迭代的参数,或者一个定义参数组的字典,如上所示,字典的键值包括:params,lr,momentum,dampening,weight_decay,nesterov)

想要改变各层的学习率,可以访问optimizer的param_groups属性。type(optimizer.param_groups) -> list

optimizer.param_groups[0].keys()

Out[21]: ['dampening', 'nesterov', 'params', 'lr', 'weight_decay', 'momentum']

因此,想要更改某层参数的学习率,可以访问optimizer.param_groups,指定某个索引更改'lr'参数就可以。

def adjust_learning_rate(optimizer, decay_rate=0.9):

for para in optimizer.param_groups:

para['lr'] = para['lr']*decay_rate

重写torch.optim,加上L1正则

查看torch.optim.SGD等Optimizer的源码,发现没有L1正则的选项,而L1正则更容易得到稀疏解。

这个时候,可以更改/home/smiles/anaconda2/lib/python2.7/site-packages/torch/optim/sgd.py文件,模拟L2正则化的操作。

L1正则化求导如下:

dw = 1 * sign(w)

更改后的sgd.py如下:

import torch

from torch.optim.optimizer import Optimizer, required

class SGD(Optimizer):

def __init__(self, params, lr=required, momentum=0, dampening=0,

weight_decay1=0, weight_decay2=0, nesterov=False):

defaults = dict(lr=lr, momentum=momentum, dampening=dampening,

weight_decay1=weight_decay1, weight_decay2=weight_decay2, nesterov=nesterov)

if nesterov and (momentum <= 0 or dampening != 0):

raise ValueError("Nesterov momentum requires a momentum and zero dampening")

super(SGD, self).__init__(params, defaults)

def __setstate__(self, state):

super(SGD, self).__setstate__(state)

for group in self.param_groups:

group.setdefault('nesterov', False)

def step(self, closure=None):

"""Performs a single optimization step.

Arguments:

closure (callable, optional): A closure that reevaluates the model

and returns the loss.

"""

loss = None

if closure is not None:

loss = closure()

for group in self.param_groups:

weight_decay1 = group['weight_decay1']

weight_decay2 = group['weight_decay2']

momentum = group['momentum']

dampening = group['dampening']

nesterov = group['nesterov']

for p in group['params']:

if p.grad is None:

continue

d_p = p.grad.data

if weight_decay1 != 0:

d_p.add_(weight_decay1, torch.sign(p.data))

if weight_decay2 != 0:

d_p.add_(weight_decay2, p.data)

if momentum != 0:

param_state = self.state[p]

if 'momentum_buffer' not in param_state:

buf = param_state['momentum_buffer'] = torch.zeros_like(p.data)

buf.mul_(momentum).add_(d_p)

else:

buf = param_state['momentum_buffer']

buf.mul_(momentum).add_(1 - dampening, d_p)

if nesterov:

d_p = d_p.add(momentum, buf)

else:

d_p = buf

p.data.add_(-group['lr'], d_p)

return loss

一个使用的例子:

optimizer = SGD([

{'params': model.features12.parameters()},

{'params': model.features22.parameters()},

{'params': model.features32.parameters()},

{'params': model.features42.parameters()},

{'params': model.features52.parameters()},

], weight_decay1=5e-4, lr=1e-1, momentum=0.9)

以上这篇关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

http://www.lbrq.cn/news/2546353.html

相关文章:

  • 黑龙江住房建设部网站网页设计与制作软件有哪些
  • 做网站要先买域名吗腾讯企点app
  • 建设银行手机银行官方网站下载安装360网址导航
  • 专门做淘宝代运营的网站北京今日重大新闻
  • 网址浏览器潍坊网站seo
  • 吴镇宇做的电影教学网站站长工具查询域名
  • intitle:律师网站建设的重要性数据分析培训机构哪家好
  • 百度做网站引流打开网址跳转到国外网站
  • 广州公司营销型网站建设百度平台app下载
  • 做网站 对方传销高明搜索seo
  • WordPress 整个网站导出网上广告怎么推广
  • 企业网站建设费用入什么科目中国法律服务网app最新下载
  • 个人免费网站如何做西安网站seo推广
  • wordpress 菜单 分隔合肥网站优化推广方案
  • 简述网站推广的五要素深圳seo公司助力网络营销飞跃
  • 自己架设的传奇怎么做网站网站制作的流程
  • 服务平台推广seo难不难学
  • 网站建设选用平台分析淄博seo推广
  • 国外真人做爰直播聊天平台网站网页分析工具
  • 专业做网站公司哪家好上海知名的seo推广咨询
  • wordpress the7 建站广州百度关键词排名
  • 海外服务器官网seoapp推广
  • it外包项目都在哪接的南宁百度seo
  • 西宁高端网站建设web成品网站源码免费
  • 德州建网站天津seo网络营销
  • 贵州网站开发公司全网最低价24小时自助下单平台
  • 海阳有没有做企业网站的谷歌网页版入口在线
  • 汉中做网站的公司电话关键词优化意见
  • 网站建设公司哪家好速找盛世传媒我们公司想做网络推广
  • 做一个交友网站怎样做需要多少资金全网
  • Gitee
  • Apache RocketMQ中 Consumer Group(消费者组)的详细说明
  • anaconda searchanaconda show | conda 检索包资源安装指定版本包指定源安装命令package
  • Spring AI 海运管理应用
  • 试用SAP BTP 02C:试用SAP HANA Schemas HDI Containers
  • 未授权访问漏洞靶场(redis,MongoDB,Memcached...)