在 TensorFlow 功能 API 指南中,有一個示例顯示了使用相同的層圖創建多個模型。(https://www.tensorflow.org/beta/guide/keras/functional#using_the_same_graph_of_layers_to_define_multiple_models)encoder_input = keras.Input(shape=(28, 28, 1), name='img')x = layers.Conv2D(16, 3, activation='relu')(encoder_input)x = layers.Conv2D(32, 3, activation='relu')(x)x = layers.MaxPooling2D(3)(x)x = layers.Conv2D(32, 3, activation='relu')(x)x = layers.Conv2D(16, 3, activation='relu')(x)encoder_output = layers.GlobalMaxPooling2D()(x)encoder = keras.Model(encoder_input, encoder_output, name='encoder')encoder.summary()x = layers.Reshape((4, 4, 1))(encoder_output)x = layers.Conv2DTranspose(16, 3, activation='relu')(x)x = layers.Conv2DTranspose(32, 3, activation='relu')(x)x = layers.UpSampling2D(3)(x)x = layers.Conv2DTranspose(16, 3, activation='relu')(x)decoder_output = layers.Conv2DTranspose(1, 3, activation='relu')(x)autoencoder = keras.Model(encoder_input, decoder_output, name='autoencoder')autoencoder.summary()是否可以在共享同一個圖表的同時保存和加載這兩個模型?如果我按以下方式保存并加載它們:# Saveencoder.save('encoder.h5')autoencoder.save('autoencoder.h5')# Loadnew_encoder = keras.models.load_model('encoder.h5')new_autoencoder = keras.models.load_model('autoencoder.h5')新的編碼器和自動編碼器將不再共享同一個圖,因此不再一起訓練。
1 回答

慕仙森
TA貢獻1827條經驗 獲得超8個贊
這是一個很酷的問題。編碼器和自動編碼器不再共享同一個圖,因為它們被保存為不相交的模型。事實上,encoder它被保存了兩次,因為它也嵌入在autoencoder.
要在仍然共享同一個圖表的同時恢復這兩個模型,我建議采用以下方法:
命名encoder的輸出層。例如:
encoder_output = layers.GlobalMaxPooling2D(name='encoder_output')(x)
僅保存autoencoder:
autoencoder.save('autoencoder.h5')
恢復autoencoder:
new_autoencoder = keras.models.load_model('autoencoder.h5')
encoder從恢復的圖重建's 圖,autoencoder使它們共享公共層:
encoder_input = new_autoencoder.get_layer('img').input
encoder_output = new_autoencoder.get_layer('encoder_output').output
new_encoder = keras.Model(encoder_input, encoder_output)
或者,您也可以手動保存/加載權重并重建圖形。
添加回答
舉報
0/150
提交
取消