How to Display Custom Images in Tensorboard (e.g. Matplotlib Plots)?

前端 未结 5 2067
遇见更好的自我
遇见更好的自我 2020-12-04 22:01

The Image Dashboard section of the Tensorboard ReadMe says:

Since the image dashboard supports arbitrary pngs, you can use this to embed custom visual

5条回答
  •  日久生厌
    2020-12-04 22:18

    Next script does not use intermediate RGB/PNG encoding. It also fixes the issue with additional operation construction during execution, single summary is reused.

    Size of the figure is expected to remain the same during execution

    Solution that works:

    import matplotlib.pyplot as plt
    import tensorflow as tf
    import numpy as np
    
    def get_figure():
      fig = plt.figure(num=0, figsize=(6, 4), dpi=300)
      fig.clf()
      return fig
    
    
    def fig2rgb_array(fig, expand=True):
      fig.canvas.draw()
      buf = fig.canvas.tostring_rgb()
      ncols, nrows = fig.canvas.get_width_height()
      shape = (nrows, ncols, 3) if not expand else (1, nrows, ncols, 3)
      return np.fromstring(buf, dtype=np.uint8).reshape(shape)
    
    
    def figure_to_summary(fig):
      image = fig2rgb_array(fig)
      summary_writer.add_summary(
        vis_summary.eval(feed_dict={vis_placeholder: image}))
    
    
    if __name__ == '__main__':
          # construct graph
          x = tf.Variable(initial_value=tf.random_uniform((2, 10)))
          inc = x.assign(x + 1)
    
          # construct summary
          fig = get_figure()
          vis_placeholder = tf.placeholder(tf.uint8, fig2rgb_array(fig).shape)
          vis_summary = tf.summary.image('custom', vis_placeholder)
    
          with tf.Session() as sess:
            tf.global_variables_initializer().run()
            summary_writer = tf.summary.FileWriter('./tmp', sess.graph)
    
            for i in range(100):
              # execute step
              _, values = sess.run([inc, x])
              # draw on the plot
              fig = get_figure()
              plt.subplot('111').scatter(values[0], values[1])
              # save the summary
              figure_to_summary(fig)
    

提交回复
热议问题