MindSpore社区活动:二阶优化

cke_691646.png

概述

常见的优化算法可分为一阶优化算法和二阶优化算法。

经典的一阶优化算法如SGD等,计算量小、计算速度快,但是收敛的速度慢,所需的迭代次数多。

二阶优化算法使用目标函数的二阶导数来加速收敛,能更快地收敛到模型最优值,所需要的迭代次数少,但由于二阶优化算法过高的计算成本,导致其总体执行时间仍然慢于一阶,故目前在深度神经网络训练中二阶优化算法的应用并不普遍。

二阶优化算法的主要计算成本在于二阶信息矩阵(Hessian矩阵、FIM矩阵等)的求逆运算,时间复杂度约为𝑂(𝑛3)。

MindSpore开发团队在现有的自然梯度算法的基础上,对FIM矩阵采用近似、切分等优化加速手段,极大的降低了逆矩阵的计算复杂度,开发出了可用的二阶优化器THOR。

使用8块Atlas训练系列产品,THOR可以在72min内完成ResNet50-v1.5网络和ImageNet数据集的训练,相比于SGD+Momentum速度提升了近一倍。

由于没有相关计算资源,本次体验仅在Ascend单卡上对CIFAR-10数据集进行。

相关代码路径https://gitee.com/mindspore/models/tree/master/official/cv/ResNet

cd scripts/
bash run_standalone_train.sh [DATASET_PATH] [CONFIG_PATH]

配置文件采用 config目录下的resnet50_cifar10_config.yaml

但是该配置文件优化器默认采用"Momentum"

如果要采用二阶优化器的话,需要修改为optimizer: "Thor"

此外还需要增加几个配置项

use_label_smooth: True

label_smooth_factor: 0.1

lr_init: 0.05803

lr_decay: 4.0839

lr_end_epoch: 53

damping_init: 0.03

damping_decay: 0.50036

frequency: 834复制

整体执行流程如下:

  1. 准备cifar10数据集,处理需要的数据集;

  2. 定义ResNet50网络;

  3. 定义损失函数和THOR优化器;

  4. 加载数据集并进行训练,训练完成后,查看结果及保存模型文件;

  5. 加载保存的模型,进行推理。

1、数据准备

cke_120020.png

然后是数据处理部分

    if config.dataset == "cifar10":
        from src.dataset import create_dataset1 as create_dataset复制
def create_dataset1(dataset_path, do_train, batch_size=32, train_image_size=224, eval_image_size=224,
                    target="Ascend", distribute=False, enable_cache=False, cache_session_id=None):
    """
    create a train or evaluate cifar10 dataset for resnet50
    Args:
        dataset_path(string): the path of dataset.
        do_train(bool): whether dataset is used for train or eval.
        repeat_num(int): the repeat times of dataset. Default: 1
        batch_size(i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值