未知的初始值设定项:加载Keras模型时的GlorotUniform

Dhr*_*odi 21 python machine-learning keras tensorflow google-colaboratory

我通过谷歌colab训练我的CNN(VGG)并生成.h5文件.现在的问题是,我可以通过谷歌colab成功预测我的输出,但是当我下载.h5训练模型文件并尝试预测我的笔记本电脑上的输出时,我在加载模型时遇到错误.

这是代码:

import tensorflow as tf
from tensorflow import keras
import h5py

# Initialization

loaded_model = keras.models.load_model('./train_personCount_model.h5')
Run Code Online (Sandbox Code Playgroud)

而错误:

ValueError: Unknown initializer: GlorotUniform
Run Code Online (Sandbox Code Playgroud)

小智 20

我解决了这个问题:

之前:

from keras.models import load_model classifierLoad = load_model('model/modeltest.h5')

为我工作

import tensorflow as tf classifierLoad = tf.keras.models.load_model('model/modeltest.h5')


小智 19

我遇到了同样的问题。更改后:

from tensorflow import keras

至:

import keras

生活再次值得生活。

  • 我必须以相反的方式去做。 (2认同)
  • 我希望有一天“keras”和“tensorflow”能够一劳永逸地弄清楚它们的相互导入。我在机器学习工作中 80% 的时间都花在根据我需要的功能弄清楚哪个导入是哪个。 (2认同)

小智 18

哇,我刚刚花了6个小时来解决这个问题。Dmitri在这里发布了一个解决方案:我在Google colab上训练了一个keras模型。现在无法将其本地加载到我的系统上。

我基本上只是在这里重新发布它,因为它对我有用。

这看起来像是keras中的某种序列化错误。如果用下面的CustomObjectScope包裹您的load_model,那么所有东西都应该工作。

import keras
from keras.models import load_model
from keras.utils import CustomObjectScope
from keras.initializers import glorot_uniform

with CustomObjectScope({'GlorotUniform': glorot_uniform()}):
        model = load_model('imdb_mlp_model.h5')
Run Code Online (Sandbox Code Playgroud)


0x0*_*01h 12

改变中

from keras.models import load_model
Run Code Online (Sandbox Code Playgroud)

from tensorflow.keras.models import load_model
Run Code Online (Sandbox Code Playgroud)

解决了我的问题!

要消除错误,请直接从Keras或TensorFlow 导入所有内容。将它们混合在同一项目中可能会导致问题。