Keras深度学习框架第二十八讲:可视化超参数调优过程

80 篇文章 0 订阅
50 篇文章 2 订阅

1、绪论

可视化超参数调优过程(Visualize the hyperparameter tuning process)指的是在机器学习或深度学习的模型训练中,通过图形化或可视化的方式展示和调整模型的超参数(hyperparameters)。这个过程有助于用户直观地理解超参数如何影响模型的性能,从而找到最优的超参数设置。可视化工具可以显示不同超参数组合下的模型性能(如准确率、损失函数值等),帮助用户更快地确定最佳的超参数设置。

1.1 Keras tuner超参数调优的可视化需求

KerasTuner 在屏幕上打印日志,包括每次试验中的超参数值,以供用户监控进度。但是,仅通过读取日志来感知超参数对结果的影响并不直观。因此,我们提供了一种方法,使用 TensorBoard 的交互式图表来可视化超参数值和相应的评估结果。

TensorBoard 是一个用于可视化机器学习实验的有用工具。它可以监控模型训练过程中的损失和指标,并可视化模型架构。将 KerasTuner 与 TensorBoard 结合使用,可以利用其 HParams 插件来可视化超参数调优结果。

我们将使用一个简单的例子来展示如何为 MNIST 图像分类数据集调整模型,并说明如何使用 KerasTuner 与 TensorBoard。

2、Keras tuner超参数调优可视化

2.1 下载和格式化数据

import numpy as np
import keras_tuner
import keras
from keras import layers

(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# Normalize the pixel values to the range of [0, 1].
x_train = x_train.astype("float32") / 255
x_test = x_test.astype("float32") / 255
# Add the channel dimension to the images.
x_train = np.expand_dims(x_train, -1)
x_test = np.expand_dims(x_test, -1)
# Print the shapes of the data.
print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)

2.2 编写build_model函数

接下来,我们编写一个 build_model 函数,用于根据超参数构建模型并返回该模型。这些超参数包括要使用的模型类型(多层感知器或卷积神经网络)、层数、单元数或滤波器数以及是否使用丢弃层(dropout)。

def build_model(hp):
    inputs = keras.Input(shape=(28, 28, 1))
    # Model type can be MLP or CNN.
    model_type = hp.Choice("model_type", ["mlp", "cnn"])
    x = inputs
    if model_type == "mlp":
        x = layers.Flatten()(x)
        # Number of layers of the MLP is a hyperparameter.
        for i in range(hp.Int("mlp_layers", 1, 3)):
            # Number of units of each layer are
            # different hyperparameters with different names.
            x = layers.Dense(
                units=hp.Int(f"units_{i}", 32, 128, step=32),
                activation="relu",
            )(x)
    else:
        # Number of layers of the CNN is also a hyperparameter.
        for i in range(hp.Int("cnn_layers", 1, 3)):
            x = layers.Conv2D(
                hp.Int(f"filters_{i}", 32, 128, step=32),
                kernel_size=(3, 3),
                activation="relu",
            )(x)
            x = layers.MaxPooling2D(pool_size=(2, 2))(x)
        x = layers.Flatten()(x)

    # A hyperparamter for whether to use dropout layer.
    if hp.Boolean("dropout"):
        x = layers.Dropout(0.5)(x)

    # The last layer contains 10 units,
    # which is the same as the number of classes.
    outputs = layers.Dense(units=10, activation="softmax")(x)
    model = keras.Model(inputs=inputs, outputs=outputs)

    # Compile the model.
    model.compile(
        loss="sparse_categorical_crossentropy",
        metrics=["accuracy"],
        optimizer="adam",
    )
    return model

2.3 测试模型

我们可以快速测试一下这些模型,以检查无论是卷积神经网络(CNN)还是多层感知器(MLP),它们是否都能成功构建。

# Initialize the `HyperParameters` and set the values.
hp = keras_tuner.HyperParameters()
hp.values["model_type"] = "cnn"
# Build the model using the `HyperParameters`.
model = build_model(hp)
# Test if the model runs with our data.
model(x_train[:100])
# Print a summary of the model.
model.summary()

# Do the same for MLP model.
hp.values["model_type"] = "mlp"
model = build_model(hp)
model(x_train[:100])
model.summary()

2.4 初始化RandomSearch 调优器

初始化一个 RandomSearch 调优器,进行10次试验,并使用验证准确率作为选择模型的指标。

tuner = keras_tuner.RandomSearch(
    build_model,
    max_trials=10,
    # Do not resume the previous search in the same directory.
    overwrite=True,
    objective="val_accuracy",
    # Set a directory to store the intermediate results.
    directory="/tmp/tb",
)

2.5 执行搜索

通过调用 tuner.search(…) 来开始搜索。为了使用 TensorBoard,我们需要将一个 keras.callbacks.TensorBoard 实例传递给 callbacks 参数。

tuner.search(
    x_train,
    y_train,
    validation_split=0.2,
    epochs=2,
    # Use the TensorBoard callback.
    # The logs will be write to "/tmp/tb_logs".
    callbacks=[keras.callbacks.TensorBoard("/tmp/tb_logs")],
)

如果在 Colab(Google Colaboratory)中运行,以下两个命令将在 Colab 内部显示 TensorBoard。

%load_ext tensorboard
%tensorboard --logdir /tmp/tb_logs

你将能够访问 TensorBoard 的所有常用功能。例如,你可以查看损失和指标曲线,以及可视化不同试验中的模型计算图。

损失和指标曲线:这些曲线展示了在训练过程中损失函数和评估指标(如准确率)的变化。

计算图:这显示了模型的计算结构,包括层、激活函数、连接等。

除了这些功能外,TensorBoard 还提供了一个 HParams 标签页,其中包含三种视图。在表格视图中,你可以在一个表格中查看 10 个不同的试验,每个试验具有不同的超参数值和评估指标。这使得你能够直观地比较不同超参数设置对模型性能的影响。

在左侧,你可以为某些超参数指定筛选条件。例如,你可以指定仅查看没有使用丢弃层(dropout layer)且具有1到2个全连接层(dense layers)的多层感知器(MLP)模型。这样,TensorBoard 的 HParams 视图将只展示符合这些筛选条件的试验结果,帮助你更集中地分析这些特定配置下的模型性能。

除了表格视图外,TensorBoard 还提供了其他两种视图:平行坐标视图和散点图矩阵视图。它们只是用于展示相同数据的不同可视化方法。你仍然可以使用左侧的面板来过滤结果。

在平行坐标视图中,每条彩色线代表一次试验。坐标轴代表超参数和评估指标。这个视图允许你直观地看到不同超参数和评估指标之间的关系,以及它们如何共同影响模型的性能。通过观察这些线条的走势,你可以发现哪些超参数对模型性能的影响最大,或者找到可能的超参数组合,以进一步优化模型。

在散点图矩阵视图中,每个点代表一次试验。这些图是试验在不同平面上投影的结果,其中不同的超参数和指标作为坐标轴。这种视图方式允许你直观地看到超参数和指标之间的相关性,以及它们如何共同影响模型的性能。通过观察这些散点图,你可以发现不同超参数组合对模型性能的影响,并找到可能的优化方向。

3、结论

超参数调优是机器学习模型训练过程中至关重要的一步,因为它涉及选择模型的最佳配置以优化性能。在调优过程中,可视化工具如TensorBoard提供了强大的支持,帮助研究人员和开发者直观地理解超参数对模型性能的影响。

通过TensorBoard的HParams插件,我们可以方便地可视化超参数调优的结果。TensorBoard提供了三种视图来展示这些数据:

  1. 表格视图(Table View):表格视图以表格的形式展示了每次试验的超参数设置和评估指标。这允许用户快速浏览和比较不同试验的结果,以找到最优的超参数组合。

  2. 平行坐标视图(Parallel Coordinates View):在这个视图中,每次试验用一条彩色线表示,而坐标轴则是超参数和评估指标。通过观察线条的走势,用户可以直观地看到不同超参数和评估指标之间的关系,以及它们如何共同影响模型的性能。

  3. 散点图矩阵视图(Scatter Plot Matrix View):散点图矩阵视图展示了试验在不同平面上的投影,其中不同的超参数和指标作为坐标轴。这种视图方式可以帮助用户发现超参数和指标之间的相关性,以及它们对模型性能的共同影响。

这些视图不仅提供了丰富的可视化选项,还允许用户通过左侧的面板来过滤结果,以便更集中地分析符合特定条件的试验。这种灵活性使得TensorBoard成为超参数调优过程中不可或缺的工具。

总之,通过TensorBoard等可视化工具,我们可以更直观地理解超参数对模型性能的影响,从而更有效地进行超参数调优。这不仅提高了模型训练的效率和准确性,还为机器学习领域的研究和应用提供了有力的支持。

  • 25
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MUKAMO

你的鼓励是我们创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值