簡體   English   中英

如何在此代碼段中使用pickle?

[英]How do I use pickle in this code snippet?

我有一個簡單的代碼片段來訓練模型,但是當我使用pickle保存模型以備將來使用時,它給我一個錯誤消息:

cannot pickle thread.LOCK objects

我用了多種格式的泡菜,但它給了我同樣的錯誤。

import pickle

model = keras.Sequential([
    keras.layers.Dense(SHAPE, input_shape=(SHAPE,)),
    keras.layers.Dense(300, activation='sigmoid'),
    keras.layers.Dense(10, activation='softmax')
])


#******************    COMPILING THE MODE        *****************
LEARNING_RATE = 0.0005
model.compile(optimizer=keras.optimizers.Adam(lr=LEARNING_RATE),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy']              
             )

# ***********      TRAINING THE MODEL   **********
EPOCHS = 20
BATCH_SIZE=50

history_original_data = model.fit(X_original_train_images, y_original_train_labels, epochs=EPOCHS, batch_size=BATCH_SIZE) 
hist_original=history_original_data.history


### PICKLE TO SAVE THE MODEL TO BE USED WITHOU PRO-TRAINING IT
pickname ="SequentialNeuroNetwork.pkl"
PickleSeq = open(pickname, 'wb')
pickle.dump(model, PickleSeq)
PickleSeq.close()

我期望上面的代碼段可以平穩運行,但是卻使我付出了代價。

您正在使用哪個版本的keras? 我幾乎可以肯定,舊版本不支持泡菜。

另外,建議使用model.save()將模型保存在keras中。 正如keras常見問題頁面中所述:

您可以使用model.save(filepath)將Keras模型保存到單個HDF5文件中,該文件包含:

  • 模型的架構,從而可以重新創建模型
  • 模型的權重
  • 訓練配置(損失,優化器)
  • 優化程序的狀態,從而可以從您上次中斷的地方繼續正確地進行訓練。

然后,您可以使用keras.models.load_model(filepath)重新實例化模型。 load_model還將負責使用保存的訓練配置來編譯模型(除非從未首先編譯過模型)。

資料來源: https : //keras.io/getting-started/faq/#how-can-i-save-a-keras-model

暫無
暫無

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

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