实现 Tensorflow2.0 的超参数调优
介绍
还记得您以前是如何调节收音机以改善频道带宽,从而获得更好的音质和更少的背景噪音的吗?
同样,在机器学习 (ML) 中,您可以通过调整超参数(例如学习率)来提高模型(学习算法)的准确性。超参数是调整其值以获得模型最佳性能的参数。
超参数调整也称为超参数优化。大多数程序员使用详尽的手动搜索,这具有更高的计算成本并且交互性较低。TensorFlow 2.0 引入了 TensorBoard HParams 仪表板,以节省时间并在笔记本中获得更好的可视化效果。
模型优化是一个持续的过程,如下图所示:
本指南将使用内置的 MNIST 数据集,该数据集可从 Keras API 数据库轻松加载。但在开始实施之前,让我们先熟悉一些术语。
什么是超参数?
在神经网络 (NN) 设计中,超参数值可帮助模型找到节点的权重,从而更准确地理解图像、文本或语音的模式。它们的值在训练过程之前设置,并且在训练过程中不会改变。
您可以调整以下超参数的值:
密集层中的单元和节点的数量。
学习率。这控制模型适应问题的速度。在每次迭代中,它将确定步长,同时朝着最小损失函数移动。范围在 0.0 到 1.0 之间。
Dropout 层。Dropout给出了在层中训练给定节点的概率。
优化器。为了减少损失并更快地获得结果,优化器会改变 NN 的权重和学习率。Adam、SDG、rmsprop 和 nadam 是一些最常用的优化器。
L2 正则化。这会为模型选择较小的权重,以提供非冗余解决方案。正则化是所有特征权重的平方和。Lambda 是经过调整的超参数,可在简单性和训练数据拟合度之间取得平衡。
这可以通过减少过度拟合来提高你的 NN 性能。
周期数。这定义了学习算法运行整个训练集所需的时间。例如,MNIST 有 60,000 张图像,因此一个周期意味着一次浏览所有 60,000 张图像。
激活函数。这些函数将非线性引入到神经元的输出中。下图给出了一些示例。
TensorBoard HParams 仪表板
在 TensorFlow 中,训练模型时,通常只有屏幕输出显示性能指标。你很难跟踪模型的实现情况。为了更容易理解、优化和调试 TF 程序,TF2.0 引入了 TensorBoard。
TensorBoard 可帮助您可视化 TF 图表、绘制定量指标等。本指南将重点介绍使用 HParams 仪表板的超参数值。HParams 仪表板工具中的以下步骤将帮助您确定优化一组超参数的最佳实践:
- 实验设置和 HParams 摘要
- 调整 TensorFlow 运行以记录超参数和指标
- 开始运行并将它们全部记录在一个父目录下
- 在 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实验摘要
使用模型中的四个超参数进行实验:
- 第一层密集层的单元数
- 辍学层的辍学率
- 优化器
- 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与我联系。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~