如何在代码片段中使用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

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

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