TensorBoard在深度学习中的应用

深度学习领域,尽管高级的机器学习技术往往比传统方法表现得更好,但它们也带来了复杂性和算法可解释性的降低。这种复杂性还会导致超参数调整的问题。但如果有一个解决方案呢?这个解决方案就是TensorBoard。TensorBoard是由TensorFlow团队创建的可视化扩展,用于降低神经网络的复杂性。它能够创建各种类型的图表,包括准确率、误差、权重分布等。

TensorBoard的组成部分

TensorBoard包含五个主要部分:

  1. 标量(Scalars):当迭代次数非常多时,直接查看每个迭代的准确率和误差是非常困难的,而且有可能陷入局部最小值而非全局最小值。标量部分可以解决这两个问题,它显示了准确率和误差随迭代变化的图表。
  2. 图表(Graphs):这部分可视化了“model.summary()”的结果,换句话说,它使神经网络的结构更加直观,简化了架构理解的过程。
  3. 分布(Distributions):一般来说,神经网络包含许多层,每层由众多的偏置和权重组成。这部分展示了这些超参数的分布情况。
  4. 直方图(Histograms):包含了这些超参数的直方图。
  5. 时间序列(Time-Series):包含了这些超参数随时间变化的值。这些部分有助于通过分析趋势来控制超参数。

代码示例

发布TensorBoard有两种方式:本地主机(由终端驱动)和在Jupyter Notebook中。以下代码展示了这两种情况。在这个练习中,将使用一个非常著名的内置数据集:MNIST。

步骤1:导入TensorFlow库。

import tensorflow as tf

步骤2:加载数据并将其分为训练集和测试集。

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

步骤3:创建模型架构。

model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(56, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(32, activation='relu'), tf.keras.layers.Dense(10) ])

步骤4:编译模型。

model.compile(optimizer='SGD', loss=loss_fn, metrics=['accuracy'])

步骤5(重要):创建回调函数。回调函数定期(每迭代)保存模型和模型结果(误差、准确率、偏置、权重等)。这是必需的,因为图表是这些值随每个迭代的结果。

tf_callbacks = tf.keras.callbacks.TensorBoard(log_dir="logs/fit", histogram_freq=1)

步骤6(重要):模型拟合(记得传递回调函数)。

model.fit(x_train, y_train, epochs=200, callbacks=tf_callbacks)

步骤7:使用以下命令创建TensorBoard:

%reload_ext tensorboard %tensorboard --logdir logs/fit

如果这段代码输入到Jupyter Notebook中,它将在那里产生一个面板。如果是在本地主机上托管,将这个命令输入到命令提示符中(不要“%”),然后打开这个链接:“https://localhost:6006”。TensorBoard在端口号6006上启动。

使用TensorBoard可视化比较优化器

也可以通过TensorBoard来比较两个优化器的性能。为此,创建两个目录“logs/optimizer1”和“logs/optimizer2”,并使用这些目录来存储相应优化器的结果(步骤4更改优化器,步骤6执行该操作),然后使用步骤7启动TensorBoard。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485