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 = inputsif 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提供了三种视图来展示这些数据:
-
表格视图(Table View):表格视图以表格的形式展示了每次试验的超参数设置和评估指标。这允许用户快速浏览和比较不同试验的结果,以找到最优的超参数组合。
-
平行坐标视图(Parallel Coordinates View):在这个视图中,每次试验用一条彩色线表示,而坐标轴则是超参数和评估指标。通过观察线条的走势,用户可以直观地看到不同超参数和评估指标之间的关系,以及它们如何共同影响模型的性能。
-
散点图矩阵视图(Scatter Plot Matrix View):散点图矩阵视图展示了试验在不同平面上的投影,其中不同的超参数和指标作为坐标轴。这种视图方式可以帮助用户发现超参数和指标之间的相关性,以及它们对模型性能的共同影响。
这些视图不仅提供了丰富的可视化选项,还允许用户通过左侧的面板来过滤结果,以便更集中地分析符合特定条件的试验。这种灵活性使得TensorBoard成为超参数调优过程中不可或缺的工具。
总之,通过TensorBoard等可视化工具,我们可以更直观地理解超参数对模型性能的影响,从而更有效地进行超参数调优。这不仅提高了模型训练的效率和准确性,还为机器学习领域的研究和应用提供了有力的支持。