在深度学习领域,尽管高级的机器学习技术往往比传统方法表现得更好,但它们也带来了复杂性和算法可解释性的降低。这种复杂性还会导致超参数调整的问题。但如果有一个解决方案呢?这个解决方案就是TensorBoard。TensorBoard是由TensorFlow团队创建的可视化扩展,用于降低神经网络的复杂性。它能够创建各种类型的图表,包括准确率、误差、权重分布等。
TensorBoard包含五个主要部分:
发布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来比较两个优化器的性能。为此,创建两个目录“logs/optimizer1”和“logs/optimizer2”,并使用这些目录来存储相应优化器的结果(步骤4更改优化器,步骤6执行该操作),然后使用步骤7启动TensorBoard。