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后返回新的学习率。

  • 相关阅读:
    Spring Cloud Hystrix Dashboard的使用 5.1.3
    Spring Cloud Hystrix 服务容错保护 5.1
    Spring Cloud Ribbon 客户端负载均衡 4.3
    Spring Cloud 如何实现服务间的调用 4.2.3
    hadoop3.1集成yarn ha
    hadoop3.1 hdfs的api使用
    hadoop3.1 ha高可用部署
    hadoop3.1 分布式集群部署
    hadoop3.1伪分布式部署
    KVM(八)使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机
  • 原文地址:https://www.cnblogs.com/king-lps/p/13202312.html
Copyright © 2011-2022 走看看