将模型保存在keras中是不是有先决条件?

Posted

技术标签:

【中文标题】将模型保存在keras中是不是有先决条件?【英文标题】:Are there prerequisites for a model to be save in keras?将模型保存在keras中是否有先决条件? 【发布时间】:2019-04-04 12:32:14 【问题描述】:

我想在训练后保存我的 keras 模型。 model.fit 函数有效,但不幸的是 model.save('path') 或 model.save_weights('path') 命令不起作用。

我也尝试使用 pickle 或 np.save 保存模型,但也没有用。

我的模型构建如下:

model_resnet = Model(inputs=RESNET.input, outputs=RESNET.output)

model = Sequential()
model.add(model_resnet)
model.add(BatchNormalization())
model.add(Reshape((1,256)))

model.add(Bidirectional(GRU(512,return_sequences=True)))
model.add(Bidirectional(GRU(512)))

model.add(Dense(11,activation='softmax'))

其中 RESNET 是使用 keras 功能 API 定义的 3D resnet32 模型。 同样的代码可以这样写:

model_ = Sequential()
model_.add(BatchNormalization())
model_.add(Reshape((1,256)))

model_.add(Bidirectional(GRU(512,return_sequences=True)))
model_.add(Bidirectional(GRU(512)))

model_.add(Dense(11,activation='softmax'))

model = Model(input = RESNET.input, outputs = model_(RESNET.output))

我正在尝试使用以下代码进行保存:

model.save(root_dir+'\\models\\model.h5')

我也试过了:

x = model.get_weights()
with open(root_dir+'\\models\\model.pickle', 'wb') as f:
    pickle.dump(x, f)

这些方法都不起作用。

使用 keras 保存功能出现以下错误:(不要介意错误中的模型名称)

  File ".../train.py", line 110, in <module>
    model_video.save(root_dir+'\\models\\model_video.h5')
  File "...\anaconda3\envs\tensorflow_env\lib\site-packages\keras\engine\network.py", line 1090, in save
    save_model(self, filepath, overwrite, include_optimizer)
  File "...\anaconda3\envs\tensorflow_env\lib\site-packages\keras\engine\saving.py", line 382, in save_model
    _serialize_model(model, f, include_optimizer)
  File "...\anaconda3\envs\tensorflow_env\lib\site-packages\keras\engine\saving.py", line 114, in _serialize_model
    layer_group[name] = val
  File "...\anaconda3\envs\tensorflow_env\lib\site-packages\keras\utils\io_utils.py", line 218, in __setitem__
    dataset = self.data.create_dataset(attr, val.shape, dtype=val.dtype)
  File "...\anaconda3\envs\tensorflow_env\lib\site-packages\h5py\_hl\group.py", line 136, in create_dataset
    dsid = dataset.make_new_dset(self, shape, dtype, data, **kwds)
  File "...\anaconda3\envs\tensorflow_env\lib\site-packages\h5py\_hl\dataset.py", line 117, in make_new_dset
    dtype = numpy.dtype(dtype)
TypeError: data type not understood

泡菜我有以下错误:

Traceback (most recent call last):
  File ".../train.py", line 113, in <module>
    pickle.dump(x, f)
_pickle.PicklingError: Can't pickle <class 'numpy.ndarray'>: it's not the same object as numpy.ndarray

【问题讨论】:

我认为这两个错误都表明您的 numpy 安装以某种方式损坏 确实,“conda install numpy”解决了问题..谢谢! 【参考方案1】:

“conda install numpy”解决了这个问题。

【讨论】:

以上是关于将模型保存在keras中是不是有先决条件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将保存的模型转换或加载到 TensorFlow 或 Keras?

keras 保存模型

在 Keras 模型中保存元数据/信息

在 Theano 中使用屏幕会话 - 竞争条件

如何将 keras 模型与其他数据一起保存并完全加载?

保存及读取keras模型参数