【问题标题】:Tensorboard and Keras Images with ImageDataGenerator带有 ImageDataGenerator 的 Tensorboard 和 Keras 图像
【发布时间】:2019-08-03 08:11:20
【问题描述】:

我在使用 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 对图像的处理。

谢谢,马文。

【问题讨论】:

    标签: python tensorflow keras tensorboard


    【解决方案1】:

    我不知道如何使用 keras 中的 tensorboard 回调来做到这一点。因此,我编写了自己的 keras 回调。这是一个短代码sn-p,你可以很容易地修改它

    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()时传递这个回调。我希望这会有所帮助。如果有更好的方法,请告诉我。

    【讨论】:

    • 感谢您的帮助,但我不明白如何处理变量 output_images
    • 你这是什么意思? Output_images 只是作为张量对象在每个 epoch 之后对您的数据的模型预测。抱歉,如果我误解了什么,但您的目标是在训练期间包括模型预测以及它们在每个时期后的变化,不是吗?!
    • 是的。但我没有得到 output_images 是我的模型的预测,谢谢。
    • 我在data 中传递什么以及如何传递?能举个例子吗?
    • 当然。假设您将测试图像存储在一个名为 imgs 的 numpy 数组中。然后您可以按如下方式初始化您的回调:img_cb = ImageCallback("somewhere", imgs, 3),其中"somewhere" 对应于保存事件文件的位置,3 对应于应该使用的图像数量。然后你可以把回调交给model.fit方法
    猜你喜欢
    • 2018-12-27
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 2020-01-25
    • 2018-11-02
    • 1970-01-01
    相关资源
    最近更新 更多