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

我有一个简单的代码片段用于训练模型,但是当我使用pickle保存模型以便将来使用时,它会给我一个错误信息:

cannot pickle thread.LOCK objects

我尝试了多种格式使用pickle,但它仍然给我相同的错误。

import picklemodel = keras.Sequential([    keras.layers.Dense(SHAPE, input_shape=(SHAPE,)),    keras.layers.Dense(300, activation='sigmoid'),    keras.layers.Dense(10, activation='softmax')])#******************    编译模型        *****************LEARNING_RATE = 0.0005model.compile(optimizer=keras.optimizers.Adam(lr=LEARNING_RATE),              loss='sparse_categorical_crossentropy',              metrics=['accuracy']                           )# ***********      训练模型   **********EPOCHS = 20BATCH_SIZE=50history_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保存模型以便无需预训练即可使用pickname ="SequentialNeuroNetwork.pkl"PickleSeq = open(pickname, 'wb')pickle.dump(model, PickleSeq)PickleSeq.close()

我期望上述代码片段能够顺利运行,但它却让我感到非常头疼。


回答:

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

或者,建议使用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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注