python - 加载保存的优化器时出错。 keras python 覆盆子

标签 python tensorflow raspberry-pi keras

我在 linux 64 机器上训练了一个 keras 顺序模型并保存到一个 .h5 文件。

有了这台 PC,我可以毫无问题地加载模型和进行预测。

现在我正在安装了 keras、tensorflow、h5py 和 python3 的 Raspberry Pi 3 中实现预测。

当我加载模型时

from keras.models import load_model
model = load_model('model-0.6358.h5')

,我得到:

usr/lib/python3.4/importlib/_bootstrap.py:321: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
return f(*args, **kwds)

/usr/local/lib/python3.4/dist-packages/keras/models.py:291: UserWarning: Error in loading the saved optimizer state. As a result, your model is starting with a freshly initialized optimizer.
warnings.warn('Error in loading the saved optimizer '

但是...看起来它预测正确。

我怎样才能避免该警告消息?

最佳答案

load_model 首先使用保存的权重构建保存的模型架构,然后尝试使用保存的权重构建保存的优化器。

但是,您会收到一条错误消息,因为保存的优化器权重的形状与优化器根据加载模型的架构期望的权重形状不匹配。

当我尝试保存并重新加载具有设置为 trainable=False 的内部子模型的模型时,我使用 Keras 2.1.4 遇到了这个问题。当您保存模型时,此信息似乎不会被保留,因此在重新初始化内部子模型后设置为 trainable=True 并且优化器期望保存的权重比实际保存的更多。如果这可能是您遇到的问题,我在 this bug-report 中描述了一个解决方法:

  1. 明确设置所有内部模型层的可训练性
  2. 在保存之前,所有层的可训练性标志必须设置为模型编译时的状态

如果你想摆脱警告并且在保存后不需要优化器,你也可以在没有优化器的情况下保存你的模型:使用 model.save(filename, include_optimizer=False)

关于python - 加载保存的优化器时出错。 keras python 覆盆子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49195189/

相关文章:

python - 层序的输入 0 与预期的 ndim=3 层不兼容,发现 ndim=2。收到完整形状 : [None, 1]

linux - 只为一个特殊的网站使用一个特殊的 DNS 服务器

linux - Raspberry Pi 上不带 X11 的 SDL2 应用程序中的键盘和鼠标

python - 如何使用 withcolumn 方法和基于多个条件的过滤器?

python - 使用 conda 环境在 VS code 中部署 Azure Functions

python - PyQt:如何在不知道项目索引号的情况下设置组合框当前项目

python - 如何根据模型要求 reshape 我的数据?

python - 尝试使用 Keras Sequential 向图像添加噪声时图像尺寸不匹配

python - 重命名内置的 python 方法,如 replace()

linux - 软件网络摄像机的双向音频