实现 Tensorflow2.0 的超参数调优

发布日期:2026-07-07 08:50:04   来源 : 杭州电子商务研究院    浏览量 :21
杭州电子商务研究院 发布日期:2026-07-07 08:50:04  
21

介绍

还记得您以前是如何调节收音机以改善频道带宽,从而获得更好的音质和更少的背景噪音的吗?

同样,在机器学习 (ML) 中,您可以通过调整超参数(例如学习率)来提高模型(学习算法)的准确性。超参数是调整其值以获得模型最佳性能的参数。
超参数调整也称为超参数优化。大多数程序员使用详尽的手动搜索,这具有更高的计算成本并且交互性较低。TensorFlow 2.0 引入了 TensorBoard HParams 仪表板,以节省时间并在笔记本中获得更好的可视化效果。

模型优化是一个持续的过程,如下图所示:

本指南将使用内置的 MNIST 数据集,该数据集可从 Keras API 数据库轻松加载。但在开始实施之前,让我们先熟悉一些术语。

什么是超参数?

在神经网络 (NN) 设计中,超参数值可帮助模型找到节点的权重,从而更准确地理解图像、文本或语音的模式。它们的值在训练过程之前设置,并且在训练过程中不会改变。

您可以调整以下超参数的值:

  1. 密集层中的单元和节点的数量。

  2. 学习率。这控制模型适应问题的速度。在每次迭代中,它将确定步长,同时朝着最小损失函数移动。范围在 0.0 到 1.0 之间。

  3. Dropout 层。Dropout给出了在层中训练给定节点的概率。

  4. 优化器。为了减少损失并更快地获得结果,优化器会改变 NN 的权重和学习率。Adam、SDG、rmsprop 和 nadam 是一些最常用的优化器。

  5. L2 正则化。这会为模型选择较小的权重,以提供非冗余解决方案。正则化是所有特征权重的平方和。Lambda 是经过调整的超参数,可在简单性和训练数据拟合度之间取得平衡。

这可以通过减少过度拟合来提高你的 NN 性能。

  1. 周期数。这定义了学习算法运行整个训练集所需的时间。例如,MNIST 有 60,000 张图像,因此一个周期意味着一次浏览所有 60,000 张图像。

  2. 激活函数。这些函数将非线性引入到神经元的输出中。下图给出了一些示例。

TensorBoard HParams 仪表板

在 TensorFlow 中,训练模型时,通常只有屏幕输出显示性能指标。你很难跟踪模型的实现情况。为了更容易理解、优化和调试 TF 程序,TF2.0 引入了 TensorBoard。

TensorBoard 可帮助您可视化 TF 图表、绘制定量指标等。本指南将重点介绍使用 HParams 仪表板的超参数值。HParams 仪表板工具中的以下步骤将帮助您确定优化一组超参数的最佳实践:

  1. 实验设置和 HParams 摘要
  2. 调整 TensorFlow 运行以记录超参数和指标
  3. 开始运行并将它们全部记录在一个父目录下
  4. 在 TensorBoard 的 HParams 仪表板中可视化结果

代码实现

先决条件

首先安装 TF 2.0 并加载 TensorBoard 笔记本扩展:

      %load_ext tensorboard
    

清除之前运行的所有日志:

      !rm -rf ./logs/
    

导入 TensorFlow 和 TensorBoard HParams 插件:

      import tensorflow as tf
from tensorboard.plugins.hparams import api as hp
    

下载MNIST数据集并缩放:

      mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
    

1.实验设置和HParams实验摘要

使用模型中的四个超参数进行实验:

  1. 第一层密集层的单元数
  2. 辍学层的辍学率
  3. 优化器
  4. L2 正则化器
      HP_NUM_UNITS = hp.HParam('num_units', hp.Discrete([256, 512]))
HP_DROPOUT = hp.HParam('dropout', hp.RealInterval(0.5, 0.6)
HP_OPTIMIZER = hp.HParam('optimizer', hp.Discrete(['adam','sgd','rmsprop']))
HP_L2 = hp.HParam('l2 regularizer', hp.RealInterval(.001,.01))

METRIC_ACCURACY = 'accuracy'

with tf.summary.create_file_writer('logs/hparam_tuning').as_default():
  hp.hparams_config(
    hparams=[HP_NUM_UNITS, HP_DROPOUT, HP_OPTIMIZER,HP_L2],
    metrics=[hp.Metric(METRIC_ACCURACY, display_name='Accuracy')],
  )
    

2. 调整 TensorFlow 运行以记录超参数和指标

该模型包含两个密集层,中间有一个 dropout 层。超参数不是硬编码的,尽管训练代码类似。所有超参数都在hparams字典中提供。

      def train_test_model(hparams):
  model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(hparams[HP_NUM_UNITS], kernel_regularizer=tf.keras.regularizers.l2(0.001), activation=tf.nn.relu),
    tf.keras.layers.Dropout(hparams[HP_DROPOUT]),
    tf.keras.layers.Dense(10, activation=tf.nn.softmax),
  ])
  model.compile(
      optimizer=hparams[HP_OPTIMIZER],
      loss='sparse_categorical_crossentropy',
      metrics=['accuracy'],
  )

  model.fit(x_train, y_train, epochs=2) 
  _, accuracy = model.evaluate(x_test, y_test)
  return accuracy
    

对于每次运行,记录包含超参数和最终准确度的 HParams 摘要:

      def run(run_dir, hparams):
  with tf.summary.create_file_writer(run_dir).as_default():
    hp.hparams(hparams)  # record the values used in this trial
    accuracy = train_test_model(hparams)
    tf.summary.scalar(METRIC_ACCURACY, accuracy, step=2)
    

3. 开始运行并将它们全部记录在一个父目录下

您现在可以尝试多个实验,并使用不同的超参数集训练每个实验。

      session_num = 0

for num_units in HP_NUM_UNITS.domain.values:
  for dropout_rate in (HP_DROPOUT.domain.min_value, HP_DROPOUT.domain.max_value):
    for l2 in (HP_L2.domain.min_value, HP_L2.domain.max_value):
      for optimizer in HP_OPTIMIZER.domain.values:
        hparams = {
            HP_NUM_UNITS: num_units,
            HP_DROPOUT: dropout_rate,
            HP_L2: l2,
            HP_OPTIMIZER: optimizer,
        }
        run_name = "run-%d" % session_num
        print('--- Starting trial: %s' % run_name)
        print({h.name: hparams[h] for h in hparams})
        run('logs/hparam_tuning/' + run_name, hparams)
        session_num += 1
    

4. 在 TensorBoard 的 HParams 仪表板中可视化结果

打开 HParams 仪表板。TensorBoard 启动后,点击顶部的HParams 。

      %tensorboard --logdir logs/hparam_tuning
    

表格视图

表视图列出了会话的名称和超参数的性能指标。方形复选框允许您限制指标的视图。

平行坐标视图

此视图将运行显示为一条线(颜色编码),该线穿过每个超参数的轴,末尾的指标显示准确率。了解哪组超参数更重要很重要。如果将鼠标指针放在任何轴上,通过的运行将突出显示。您可以通过拖动轴来重新排序。

散点图视图

此视图用于识别每个指标之间的相关性。单击或将鼠标悬停在会话组上可突出显示跨图的会话。

结论

按准确率降序排列,结果显示最优化的模型有 512 个单元,dropout 率为 0.5,Adam 优化器的 L2 正则化率为 0.01,准确率为 95.710%。该模型可以进一步优化。您可以包含更多性能指标,以便更好地进行可视化和理解。

本指南对 TensorBoard 进行了简要介绍。TensorBoard 的 HParams 仪表板提供了出色的可视化效果,可帮助您了解哪些超参数可以进一步微调,从而使您的 NN 模型更加准确和可靠。

您可以在此处探索其他 TensorBoard 功能,如图表、投影仪等

希望您喜欢学习。如果您有任何疑问,请随时通过CodeAlphabet与我联系。

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据