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

时间:2019-07-11 10:28:00

标签: python tensorflow machine-learning pickle data-science

我有一个简单的代码片段来训练模型,但是当我使用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()

我期望上面的代码段可以平稳运行,但是却使我付出了代价。

1 个答案:

答案 0 :(得分:0)

您使用哪个版本的keras?我几乎可以肯定,旧版本不支持pickle。

或者,建议使用model.save()将模型保存在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