【问题标题】:How to save/load part of a model in TensorFlow 2?如何在 TensorFlow 2 中保存/加载模型的一部分?
【发布时间】:2020-06-02 18:43:36
【问题描述】:

我在 TensorFlow 2 中制作了一个自动编码器。首先,我需要在数据集上训练模型。训练自动编码器后,我想将自动编码器的编码器部分用于不同的数据集,同时保留训练后的权重。有没有办法这样做?我找不到一个。任何指导方针都会有所帮助。这是我正在尝试使用的粗略自动编码器:

from tensorflow.keras.layers import Input, Dense
from tensorflow.keras import Model

def Autoencoder():
    # Encoder
    inp = Input(shape=(100,))
    x = Dense(1000)(inp)
    x = Dense(500)(x)
    code = Dense(10)(x)

    # Decoder    
    x = Dense(500)(code)
    x = Dense(1000)(x)
    out = Dense(100)(x)

    model = Model(inp,out)
    return model

autoencoder = Autoencoder()

【问题讨论】:

    标签: python tensorflow keras tensorflow2.0 autoencoder


    【解决方案1】:

    如果您只想使用编码器部分,您可以编写一个 CustomCheckpoint 类并保存编码器,如下所示。

    class CustomCheckpoint(Callback):
    
    def __init__(self, filepath, encoder):
        self.monitor = 'val_loss'
        self.monitor_op = np.less
        self.best = np.Inf
    
        self.filepath = filepath
        self.encoder = encoder
    
    def on_epoch_end(self, epoch, logs=None):
        current = logs.get(self.monitor)
        if self.monitor_op(current, self.best):
            self.best = current
            # self.encoder.save_weights(self.filepath, overwrite=True)
            self.encoder.save(self.filepath, overwrite=True) # Whichever you prefer  
    

    要从保存的权重中加载编码器部分,您可以执行以下代码。

    from keras.models import load_model
    autoencoder = load_model("path_to_file")
    encoder = Model(autoencoder.layers[0].input, autoencoder.layers[1].output)
    

    【讨论】:

      猜你喜欢
      • 2020-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 2019-04-12
      • 1970-01-01
      相关资源
      最近更新 更多