【问题标题】:Save Autoencoder's encoder model保存 Autoencoder 的编码器模型
【发布时间】:2018-06-06 03:16:35
【问题描述】:

我使用 ModelCheckpoint 来保存最好的自动编码器模型如下:

checkpoint = ModelCheckpoint("ae_model", monitor='val_loss', verbose=1, save_best_only=True, mode='max')
callbacks_list = [checkpoint]
# encoder layer
encoded = Dense(128, activation='relu')(input)
encoder_output = Dense(10)(encoded)
# decoder layer
decoded = Dense(128, activation='relu')(decoded)
# construct the autoencoder model
autoencoder = Model(input=input_img, output=decoded)
# construct the encoder model
encoder = Model(input=input_img, output=encoder_output)
autoencoder.compile(loss='mse', optimizer='adam')
autoencoder.fit(x_train, x_train, epochs=100, batch_size=10,
                shuffle=True, validation_split=0.33, 
                callbacks=callbacks_list)

但是,当保存了最好的自动编码器模型时,如何保存编码器模型?所以我可以像下面这样重用编码器模型。

from keras.models import load_model
encoder = load_model('encoder_model')

或者是否有其他方法可以将编码器与自动编码器模型分开?

from keras.models import load_model
autoencoder = load_model('autoencoder_model')
encoder = autoencoder.???

谢谢,

【问题讨论】:

    标签: python keras autoencoder


    【解决方案1】:

    您可以编写小的自定义 ModelCheckpoint 类来替换应保存的模型:

    class EncoderCheckpoint(ModelCheckpoint):
      def __init__(self, filepath, **kwargs):
        super().__init__(filepath, **kwargs)
        self.model = encoder # we manually set encoder model
    
      def set_model(self, model):
        pass # ignore when Keras tries to set autoencoder model
    

    【讨论】:

    • 谢谢,当我重新加载编码器模型时,我收到“用户警告:在保存文件中找不到训练配置:模型编译。手动编译。”信息。并且训练和保存的编码模型之间的编码结果是不同的。这是正常的吗?
    • 如果您只是要使用编码器进行预测,则不需要训练配置,所以这不是问题。结果可能会有所不同,因为您保存了最好的一个,它可能不是训练后的最后一个。
    猜你喜欢
    • 2019-05-20
    • 2022-01-04
    • 1970-01-01
    • 2020-09-26
    • 2021-11-10
    • 2017-01-25
    • 1970-01-01
    • 2021-10-01
    • 2018-09-08
    相关资源
    最近更新 更多