Отображение рисунка matplotlib в тензорной доске вместо дампа в файл

Я пытаюсь отображать изображения, созданные Tensorflow, непосредственно в Tensorboard. Я пытался использовать это решение Tensorflow: как Отображать пользовательские изображения в Tensorboard (например, графики Matplotlib), но я не понимаю, как вы можете связать это с изображениями, созданными во время обучения, поскольку сводка определяется перед созданием графика Tensorflow:

def plot(samples):
   fig = plt.figure(figsize=(4, 4))
   gs = gridspec.GridSpec(4, 4)
   gs.update(wspace=0.05, hspace=0.05)
   for i, sample in enumerate(samples):
       ax = plt.subplot(gs[i])
       plt.axis('off')
       ax.set_xticklabels([])
       ax.set_yticklabels([])
       ax.set_aspect('equal')
       plt.imshow(sample.reshape(28, 28), cmap='Greys_r')
   return fig

   # ....

   if it % 1000 == 0:
       samples = sess.run(G_sample, feed_dict={z: sample_z(16, z_dim)})
       fig = plot(samples)
       plt.savefig('out/{}.png'
                    .format(str(i).zfill(3)), bbox_inches='tight')
       i += 1
       plt.close(fig)

person Amine Kerkeni    schedule 19.02.2017    source источник


Ответы (2)


С tf-matplotlib простой точечный график сводится к следующему:

import tensorflow as tf
import numpy as np

import tfmpl

@tfmpl.figure_tensor
def draw_scatter(scaled, colors): 
    '''Draw scatter plots. One for each color.'''  
    figs = tfmpl.create_figures(len(colors), figsize=(4,4))
    for idx, f in enumerate(figs):
        ax = f.add_subplot(111)
        ax.axis('off')
        ax.scatter(scaled[:, 0], scaled[:, 1], c=colors[idx])
        f.tight_layout()

    return figs

with tf.Session(graph=tf.Graph()) as sess:

    # A point cloud that can be scaled by the user
    points = tf.constant(
        np.random.normal(loc=0.0, scale=1.0, size=(100, 2)).astype(np.float32)
    )
    scale = tf.placeholder(tf.float32)        
    scaled = points*scale

    # Note, `scaled` above is a tensor. Its being passed `draw_scatter` below. 
    # However, when `draw_scatter` is invoked, the tensor will be evaluated and a
    # numpy array representing its content is provided.   
    image_tensor = draw_scatter(scaled, ['r', 'g'])
    image_summary = tf.summary.image('scatter', image_tensor)      
    all_summaries = tf.summary.merge_all() 

    writer = tf.summary.FileWriter('log', sess.graph)
    summary = sess.run(all_summaries, feed_dict={scale: 2.})
    writer.add_summary(summary, global_step=0)

При выполнении это приводит к следующему графику внутри Tensorboard

person cheind    schedule 27.03.2018

Я думаю, вы путаете две вещи: сводки Tensorboard (https://www.tensorflow.org/api_docs/python/tf/summary/image) и сохраните изображение.

Если вы хотите отобразить свои образцы в tensorboard, вы должны использовать tf.summary.image в своем коде и передать ему свой тензор G_sample. Если вы посмотрите на https://www.tensorflow.org/api_guides/python/summary#Generation_of_Summaries вы получите больше информации о том, как вы можете использовать Filewriters и т. д.

Дайте мне знать, если это поможет, или вы застряли в другом месте!

person rmeertens    schedule 19.02.2017
comment
Моя проблема в том, что я не понимаю, как я могу преобразовать свои данные в формат сводки изображения, не проходя через matplotlib. Я хочу заменить plt.savefig чем-то, что отправляет результат на tensorboard. Я уже могу показывать скалярные сводки в tensorboard. с тем же примером. - person Amine Kerkeni; 19.02.2017