使用 ImageDataGenerator 的 Tensorboard 和 Keras 图像

Tensorboard and Keras Images with ImageDataGenerator

我在使用 TensorFlow、Keras 和 TensorBoard 时遇到问题。

我写了一个图像分类网络。我使用 Keras 的 ImageDataGenerator 在拟合期间加载图像:

test_image_data = test_image_generator.flow_from_directory("images/test_set/buildings",
                                                       target_size=(64, 64),
                                                       batch_size=32,
                                                       class_mode='binary')

tensorboard = TensorBoard(log_dir='./log/{}'.format(NAME), embeddings_freq=1, embeddings_layer_names=['features'], embeddings_data=test_image_data)

model.fit_generator(train_image_data, validation_data=test_image_data, validation_steps=800,
                    steps_per_epoch=8000, epochs=10, callbacks=[tensorboard])

所以我想在 TensorBoard 中查看 CNN 对图像做了什么。

谢谢,马文。

我也不知道如何在 keras 中使用 tensorboard 回调来做到这一点。因此,我编写了自己的 keras 回调。这是一个简短的代码片段,您可以轻松修改它

class ImageCallback(Callback):
    def __init__(self,logdir, data, n_images):
        self.logdir = logdir
        self.data = data
        self.n_images = n_images
    def set_model(self,model):
        self.model = model
        self.sess = K.get_session()
        self.writer = tf.summary.FileWriter(logdir=self.logdir)
    def on_epoch_end(self,epoch,logs={}):
        output_images = tf.cast(self.model.call(self.data),dtype=tf.float32)
        output_images *= 255
        with tf.name_scope("predictions"):
            tf.summary.image(name="output",tensor = output_iamges, max_outputs=self.n_images)
        self.writer.add_summary(self.sess.run(self.summary), epoch+1)
    def on_train_begin(self,logs=None):
        with tf.name_scope("images"):
            input_images = tf.summary.image(name="input", tensor=self.data, max_outputs=self.n_images)
        self.writer.add_summary(self.sess.run(input_images))
        output_images = tf.cast(self.model.call(self.data),dtype=tf.float32)
        output_images *= 255
        with tf.name_scope("predictions"):
            tf.summary.image(name="output",tensor = output_images, max_outputs=self.n_images)
       self.summary = tf.summary.merge_all(scope='predictions')
       self.writer.add_summary(self.sess.run(self.summary),0)

那么调用model.fit()的时候就可以传递这个回调了。我希望这有帮助。如果有更好的方法,请告诉我。