【问题标题】:How to make custom callback in keras to generate sample image in VAE training?如何在 keras 中进行自定义回调以在 VAE 训练中生成示例图像?
【发布时间】:2020-05-23 13:25:12
【问题描述】:

我正在 64*64 图像上训练一个简单的 VAE 模型,我希望查看每个 epoch 或每两个批次后生成的图像以了解进度。

当我训练模型时,我会等到训练完成后再查看结果。

我尝试在 Keras 中创建一个自定义回调函数来生成图像并保存它,但无法做到。有可能吗?我找不到类似的东西。

如果您向我推荐一个解释如何这样做或向我展示示例的来源,那就太棒了。

注意:我对干净的 Keras.callback 解决方案感兴趣,而不是遍历每个 epoch、训练和生成样本

【问题讨论】:

    标签: python machine-learning keras callback autoencoder


    【解决方案1】:

    如果还需要,可以在keras中定义自定义回调为keras.callbacks.Callback的子类:

    class CustomCallback(keras.callbacks.Callback):
        def __init__(self, save_path, VAE):
            self.save_path = save_path
            self.VAE = VAE
        def on_epoch_end(self, epoch, logs={}):
            #load the image
            #get latent_space with self.VAE.encoder.predict(image)
            #get reconstructed image wtih self.VAE.decoder.predict(latent_space)
            #plot reconstructed image with matplotlib.pyplot
    

    然后将回调定义为image_callback = CustomCallback(...) 并将 image_callback 放在回调列表中

    【讨论】:

      【解决方案2】:

      是的,它实际上是可能的,但我总是使用 matplotlib 和一个自定义函数。例如类似的东西。

      for steps in range (epochs):
      
          Train,Test = YourDataGenerator() # load your images for one loop
          model.fit(Train,Test,batch_size= ...)
      
      
          result = model.predict(Test_image)
          plt.imshow(result[0,:,:,:]) # keras always returns [batch.nr,heigth,width,channels]
      
          filename1 = '/content/runde2/%s_generated_plot_%06d.png' % (test, (steps+1))
          plt.savefig(filename1 )
          plt.close()
      

      我认为还有一个干净的 keras.callback 版本,但我一直使用这种方法,因为您可以使用其他库来更轻松地在每个循环中增加数据。不过这只是我的看法,希望能帮到你一点。

      【讨论】:

      • 非常感谢,这是我现在使用的临时解决方案,但我仍然对干净的回调方法感兴趣。
      猜你喜欢
      • 2022-01-17
      • 1970-01-01
      • 2020-06-05
      • 2019-05-02
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      相关资源
      最近更新 更多