尝试存储神经网络时遇到“无法腌制_thread.RLock对象”的问题

时间:2018-09-24 07:45:44

标签: python neural-network keras persistence pickle

我目前正在训练神经网络,我试图存储训练后的模型以备将来使用。该模型基于Sequential中的keras(请参见下文)。我正在使用joblib.dump(model, output_file_gen)来存储信息。但是,我收到错误消息:

TypeError: can't pickle _thread.RLock objects.

我看过一些有关此错误消息的StackOverflow帖子,它似乎与多线程有关。我不确定模型中会发生什么,但也许有人可以通过采取措施消除该错误或建议一种更好的存储神经网络的途径,为我提供如何存储模型的建议。

NN的设置如下:

model = Sequential()

model.add(Dense(256, input_dim=self.latent_dim))
model.add(LeakyReLU(alpha=0.2))
model.add(BatchNormalization(momentum=0.8))
model.add(Dense(512))
model.add(LeakyReLU(alpha=0.2))
model.add(BatchNormalization(momentum=0.8))
model.add(Dense(1024))
model.add(LeakyReLU(alpha=0.2))
model.add(BatchNormalization(momentum=0.8))
model.add(Dense(np.prod(self.img_shape), activation='tanh'))
model.add(Reshape(self.img_shape))

1 个答案:

答案 0 :(得分:1)

不建议使用pickle或cPickle保存Keras模型,这是导致错误的原因(松散地解释)

您可以使用model.save(filepath)将模型保存到单个HDF5文件中,该文件将包含:

  1. 模型的体系结构,允许重新创建模型
  2. 模型的权重
  3. 培训配置(损失,优化程序)
  4. 优化器的状态,允许从您上次中断的地方继续进行精确训练。

然后可以使用keras.models.load_model(filepath)重新实例化/重新加载模型。

以上将占用大量磁盘空间。因此您也可以保存模型权重。有关更多详细信息,请参见here

相关问题