我目前正在训练神经网络,我试图存储训练后的模型以备将来使用。该模型基于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))
答案 0 :(得分:1)
不建议使用pickle或cPickle保存Keras模型,这是导致错误的原因(松散地解释)
您可以使用model.save(filepath)
将模型保存到单个HDF5文件中,该文件将包含:
然后可以使用keras.models.load_model(filepath)
重新实例化/重新加载模型。
以上将占用大量磁盘空间。因此您也可以保存模型权重。有关更多详细信息,请参见here