如何在 keras 中进行自定义回调以在 VAE 训练中生成示例图像?



我正在64*64张图像上训练一个简单的VAE模型,我想看看每个时代或每几批之后生成的图像,看看进度。

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

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

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

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

如果仍然需要它,可以在 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放在回调列表中

是的,它实际上是可能的,但我总是使用 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版本,但我总是使用这种方法,因为您可以使用其他库来更轻松地为每个循环进行数据增强。但这只是我的意见,希望我至少能帮到你一点。

相关内容

  • 没有找到相关文章

最新更新