zoukankan      html  css  js  c++  java
  • Optimization: initialize and update weights

    一。mxnet优化器主要有三个API组成:

    可以看到由初始化、优化器、学习率规划三部分组成。

    首先是一个symbol训练demo,同时利用这三个api :

    1)首先建立symbol模型

    >>> data = mx.symbol.Variable('data')
    >>> label = mx.symbol.Variable('softmax_label')
    >>> fc = mx.symbol.FullyConnected(data, name='fc', num_hidden=10)
    >>> loss = mx.symbol.SoftmaxOutput(fc, label, name='softmax')
    >>> mod = mx.mod.Module(loss)     # 建立module
    >>> mod.bind(data_shapes=[('data', (128,20))], label_shapes=[('softmax_label', (128,))])   # 执行

    2)初始化权重参数,正态分布[-1,1]

    >>> mod.init_params(mx.initializer.Uniform(scale=1.0))

    3)利用sgd和每一百步学习率*0.9的策略来训练

    lr_sch = mx.lr_scheduler.FactorScheduler(step=100, factor=0.9)   # 学习策略
    mod.init_optimizer(
    optimizer='sgd', optimizer_params=(('learning_rate', 0.1), ('lr_scheduler', lr_sch)))   # sgd优化器

    4)然后利用mod.fit来训练

    二。 初始化包介绍

    mxnet.initializer

    class mxnet.initializer.Initializer(**kwargs)[source]  是所有初始化器的基类。

    例如: class mxnet.initializer.Uniform(scale=0.07)[source]

    # Given 'module', an instance of 'mxnet.module.Module', initialize weights
    # to random values uniformly sampled between -0.1 and 0.1.
    
    init = mx.init.Uniform(0.1)
    module.init_params(init)
    for dictionary in module.get_params():
    for key in dictionary:
    print(key)
    print(dictionary[key].asnumpy())

    三。 优化器包介绍

    例如adam:

    class mxnet.optimizer.Adam(learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, lazy_update=True, **kwargs)[source]

    这些optimizer都继承自类class mxnet.optimizer.Optimizer(rescale_grad=1.0, param_idx2name=None, wd=0.0, clip_gradient=None, learning_rate=0.01, lr_scheduler=None, sym=None, begin_num_update=0, multi_precision=False, param_dict=None)[source]

    可以这样建立一个优化器:

    >>> sgd = mx.optimizer.Optimizer.create_optimizer('sgd')
    >>> type(sgd)
    
    >>> adam = mx.optimizer.create('adam', learning_rate=.1)
    >>> type(adam)

    主要方法:

    • set_learning_rate(lr)[source]   为当前的优化器设置一个新的学习率
    • set_lr_mult(args_lr_mult)   为每个参数设置一个独立的学习率乘子
    • set_wd_mult(args_wd_mult)[source]   为每个参数设置一个独立的权重衰减
    • update(index, weight, grad, state)[source]    根据对应的梯度和状态来更新给定的参数

    四。学习率规划介绍

    所有规划的基类:class mxnet.lr_scheduler.LRScheduler(base_lr=0.01, warmup_steps=0, warmup_begin_lr=0, warmup_mode='linear')[source]

    根据返回一个新的学习率。基类中的参数:

    • base_lr(float,可选)-初始学习速率。
    • warmup_steps(int)– 该scheduler开始衰减之前所经过的warmup步数
    • warmup_begin_lr(float)-如果使用warmup,开始warmup的学习速度
    • warmup_mode(字符串)-预热可以在两种模式下进行。“线性”模式以相等的增量逐渐增加。“恒定”模式保持lr不变

    最常见的有根据step来进行学习率变化:

    class mxnet.lr_scheduler.FactorScheduler(step, factor=1, stop_factor_lr=1e-08, base_lr=0.01, warmup_steps=0, warmup_begin_lr=0, warmup_mode='linear')

    每隔step步,给学习率乘以factor后返回新的学习率。

  • 相关阅读:
    如何进入docker 使用root用户的方式
    阿里云服务搭建nginx并配置
    阿里云容器部署Redis集群
    Redis运维利器 -- RedisManager
    远程连接-使用SSH密钥对远程登录阿里云云服务器
    第1课:SQL注入原理深度解析
    数据库设计三大范式
    linux指令大全(归类整理)
    linux目录结构
    linux-创建/使用快照/克隆(类似windows中备份还原)
  • 原文地址:https://www.cnblogs.com/king-lps/p/13202312.html
Copyright © 2011-2022 走看看