簡體   English   中英

使用檢查點時,keras不會加載模型和權重

[英]keras dosen't load the model and weights when using checkpoint

我正在使用keras構建深層的自動編碼器。 我使用它的檢查點加載了模型和權重,但結果始終為None ,我認為這意味着檢查點無法正常工作並且無法節省權重。 這是我如何進行的代碼:

checkpointer = ModelCheckpoint(filepath="weights.best.h5",
                               verbose=0,
                               save_best_only=True)
tensorboard = TensorBoard(log_dir='/tmp/autoencoder',
                          histogram_freq=0,
                          write_graph=True,
                          write_images=True)
input_enc = Input(shape=(input_size,))
hidden_1 = Dense(hidden_size1, activation='relu')(input_enc)
hidden_11 = Dense(hidden_size2, activation='relu')(hidden_1)
code = Dense(code_size, activation='relu')(hidden_11)
hidden_22 = Dense(hidden_size2, activation='relu')(code)
hidden_2 = Dense(hidden_size1, activation='relu')(hidden_22)
output_enc = Dense(input_size, activation='tanh')(hidden_2)
autoencoder_yes = Model(input_enc, output_enc)

autoencoder_yes.compile(optimizer='adam',
                         loss='mean_squared_error', 
                         metrics=['accuracy'])
history_yes = autoencoder_yes.fit(df_noyau_norm_y, df_noyau_norm_y,
                               epochs=200,
                                batch_size=batch_size,
                                shuffle = True,
                                validation_data=(df_test_norm_y, df_test_norm_y),
                                verbose=1, 
                                callbacks=[checkpointer, tensorboard]).history

autoencoder_yes.save_weights("weights.best.h5")
print(autoencoder_yes.load_weights("weights.best.h5"))

有人可以幫我找出解決問題的方法嗎? 謝謝

您應該使用save_weights_only=True 沒有這個,整個模型將不僅僅保存重量。 為了能夠加載重量,您必須保存如下重量:

checkpointer = ModelCheckpoint(filepath="weights.best.h5",
                           verbose=0, save_weights_only=True,
                           save_best_only=True)

不,您對load_weights返回None的解釋不正確。 負載權重是一個過程,它不返回任何內容,如果將過程的返回值分配給變量,則它將獲得值None。

因此,減輕體重可能效果很好,這只是您的解釋有誤。

這是預期的行為,不是錯誤。 autoencoder_yes.load_weights("weights.best.h5")實際上不返回任何內容,因此,如果您嘗試打印此函數的輸出, 則將獲得None作為輸出。

預期行為

在提供的代碼中,您已經訓練了模型並保存了權重。 因此, autoencoder_yes是具有精確調整權重的keras.Model對象。

在同一腳本中,如果再次加載保存的權重,則不會發生任何事情,保存的權重將再次加載。

為了清楚

從另一個新腳本開始,構建相同的模型架構,並從h5文件中重新加載權重,然后進行一些預測。 在這種情況下,它將無聲加載預訓練的權重並根據該值進行預測。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM