如何在Keras中使用VisualDL

下面我们演示一下如何在Keras中使用VisualDL,从而可以把Keras的训练过程可视化出来。我们将以Keras用卷积神经网络(CNN, Convolutional Neural Network)来训练MNIST 数据集作为例子。

程序的主体来自Keras的官方GitHub Example

我们只需要在代码里面创建 VisualDL 的数据采集 loggers

  1. # create VisualDL logger
  2. logdir = "/workspace"
  3. logger = LogWriter(logdir, sync_cycle=100)
  4.  
  5. # mark the components with 'train' label.
  6. with logger.mode("train"):
  7. # create a scalar component called 'scalars/'
  8. scalar_keras_train_loss = logger.scalar(
  9. "scalars/scalar_keras_train_loss")
  10. image_input = logger.image("images/input", 1)
  11. image0 = logger.image("images/image0", 1)
  12. image1 = logger.image("images/image1", 1)
  13. histogram0 = logger.histogram("histogram/histogram0", num_buckets=50)
  14. histogram1 = logger.histogram("histogram/histogram1", num_buckets=50)
  15.  

然后在Keras提供的回调函数(callback)中插入我们的数据采集代码就可以了。

  1. train_step = 0
  2.  
  3. class LossHistory(keras.callbacks.Callback):
  4. def on_train_begin(self, logs={}):
  5. self.losses = []
  6.  
  7. def on_batch_end(self, batch, logs={}):
  8. global train_step
  9.  
  10. # Scalar
  11. scalar_keras_train_loss.add_record(train_step, logs.get('loss'))
  12.  
  13. # get weights for 2 layers
  14. W0 = model.layers[0].get_weights()[0] # 3 x 3 x 1 x 32
  15. W1 = model.layers[1].get_weights()[0] # 3 x 3 x 32 x 64
  16.  
  17. weight_array0 = W0.flatten()
  18. weight_array1 = W1.flatten()
  19.  
  20. # histogram
  21. histogram0.add_record(train_step, weight_array0)
  22. histogram1.add_record(train_step, weight_array1)
  23.  
  24. # image
  25. image_input.start_sampling()
  26. image_input.add_sample([28, 28], x_train[0].flatten())
  27. image_input.finish_sampling()
  28.  
  29. image0.start_sampling()
  30. image0.add_sample([9, 32], weight_array0)
  31. image0.finish_sampling()
  32.  
  33. image1.start_sampling()
  34. image1.add_sample([288, 64], weight_array1)
  35. image1.finish_sampling()
  36.  
  37. train_step += 1
  38. self.losses.append(logs.get('loss'))

训练结束后,各个组件的可视化结果如下:

关于误差的数值图的如下:

如何在Keras中使用VisualDL - 图1

输入图片以及训练过后的第一,第二层卷积权重图的如下:

如何在Keras中使用VisualDL - 图2

训练参数的柱状图的如下:

如何在Keras中使用VisualDL - 图3

完整的演示程序可以在这里下载。