Day 18 : 深度学习(神经网络)自动调参术 - KerasTuner

  • 接续将关注焦点来到 Model 的主题,在您阅读本系列文章之前,您或许已有建模经验,在用於生产的机械学习情境,手动调参优化模型与资料是耗费人时的吃重工作,自动化训练、调参机制成为无可避免的选择,让您将时间投入在更需要在意的问题之中。
  • 在本系列 Model 的主题,将介绍如何自动化选择与训练模型,以及优化模型的有趣技巧。这篇说明的是自动化调整超参数的 KerasTuner。
  • Colab 实作范例

Hyperparameter turning 超参数调参

  • 在您的 ML 系统中,输入可归纳为「资料」、「超参数」及「模型」,在机械学习领域中,能否选择良好的超参数,通常是决定机器学习专案成败的关键,对於更复杂的模型,超参数的数量会急剧增加,手动调整它们可能非常具有挑战性。有没有可能用自动化的方式搜寻最佳参数?
  • 超参数类型有两种:
    • Model hyperparameters:
      • 影响模型选择的模型超参数,例如隐藏层的数量和宽度。
    • Algorithm hyperparameters:
      • 影响学习的演算法,例如 SGD 的学习率和 KNN 的 K 值。

KerasTurner

  • Keras Tuner是 Keras 团队的一个模组,可自动执行神经网络的超参数调整
  • 为了进行比较,首先使用预先选择的超参数训练 Baseline 模型,然後使用调整後的超参数重做该过程。
  • 范例改写自Tensorflow 提供的官方教学,采用采用 Fashion MNIST dataset 资料集。提供您 Colab 实作范例

建立基准模型

  • 先定义基本模型作为优化基准。
  • 为了方便显示结果,范例有定义一个辅助函数。

定义模型

  • 当您构建调整超参数的模型时,除了模型架构之外,您还定义了超参数搜索空间。为了调整超参数的模型称为 Hyper Model。

  • 您可以通过两种方法定义 Hyper Model:

    • 通过使用模型构建器功能(本范例采用)。
    • 通过HyperModel继承 Keras Tuner类别。
  • 另外两个预定义的HyperModel类别 HyperXceptionHyperResNet可用於计算机视觉应用程序。

  • 以下模型函数中,

    • Int()用来定义密集单元的搜索空间的最小值和最大值。
    • Choice()用於设定学习率。
    def model_builder(hp):
    
      model = keras.Sequential()
      model.add(keras.layers.Flatten(input_shape=(28, 28)))
    
      # 设定搜索值范围
      hp_units = hp.Int('units', min_value=32, max_value=512, step=32) 
    
      model.add(
          keras.layers.Dense(
              units=hp_units, 
              activation='relu', 
              name='dense_1'
              )
          )
    
      model.add(keras.layers.Dropout(0.2))
      model.add(keras.layers.Dense(10, activation='softmax'))
    
      # 设定学习率范围 0.01, 0.001, or 0.0001
      hp_learning_rate = hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])
    
      model.compile(
          optimizer=keras.optimizers.Adam(learning_rate=hp_learning_rate),
          loss=keras.losses.SparseCategoricalCrossentropy(),
          metrics=['accuracy']
          )
      return model
    

实例化 Tuner 并执行超调

  • 在此设定 Tuner 如下,细节调整您可以参考官方文件

    # Instantiate the tuner
    tuner = kt.Hyperband(
        model_builder,
        objective='val_accuracy',
        max_epochs=10,
        factor=3,
        directory='kt_dir',
        project_name='kt_hyperband'
        )
    
  • 另外为了节省不必要的训练时间,定义了一个 EarlyStopping,当验证的 loss 在 5 个 epoch 没改善时停止训练,以下为持续搜寻的过程。

  • 最後将产生一组最佳超参数搜寻结果。

以最佳超参数训练模型并比对基准

  • 范例搜寻到最佳的超参数为隐藏层设定 480 个神经元,学习率为 0.001。
  • 经比对有自动搜寻出神经元略低、准确度略高、loss略低的超参数调整结果,虽然不明显。

小结

  • 在本篇您使用 Keras Tuner 方便地调整超参数。您定义了要调整的参数、搜索空间和搜索策略,以达到最佳超参数集。虽然要搜寻最佳参数过程消耗运算资源,但可让您腾出时间做更重要的事。
  • 用於生产的机械学习情境,您会有因为时间推移产生的资料偏移、概念篇移、模型效果衰退问题,触发自动化持续训练机制,您可以建构较可靠的机械学习服务。

参考


<<:  Day 3 Odoo模组开发

>>:  企划实现(3)

[Day 21] Sass - Media Query

Sass媒体查询其实与Css媒体查询是差不多的~ 只是在Sass中也可以使用SassScript e...

Day 28 [Python ML、资料清理] 处理字元编码

Get our environment sep up # modules we'll use imp...

Day17:图形搜寻-贝尔曼-福特演算法(Bellman-Ford algorithm)

最短路径演算法 最短路径是在赋予edges权重的「加权图形」里,指定「起点」和「终点」,求出起点到终...

D27 第十四周 (回忆篇)

支线任务:共笔部落格切版 礼拜一的时候终於把留言版做完了,接着是弄共笔部落格的文章列表样板,花了一两...

Day 7 - Using Global.asax File for Short URL Routing with ASP.NET Web Forms C# 使用全域应用程序类别产生短网址路由功能

=x= 🌵 网址显示方式管理。 短网址功能介绍 : 📌 如果仔细观察网址,可以发现平常浏览的网页并不...