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

时间:2018-11-07 05:09:17

标签: python tensorflow machine-learning keras google-colaboratory

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

代码如下:

import tensorflow as tf
from tensorflow import keras
import h5py

# Initialization

loaded_model = keras.models.load_model('./train_personCount_model.h5')

错误:

ValueError: Unknown initializer: GlorotUniform

11 个答案:

答案 0 :(得分:9)

哇,我刚刚度过了6个小时的时间来解决这个问题。Dmitri在这里发布了一个解决方案:I trained a keras model on google colab. Now not able to load it locally on my system.

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

这看起来像是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')

答案 1 :(得分:7)

我已解决问题:

之前:

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')

答案 2 :(得分:5)

更改

from keras.models import load_model

from tensorflow.keras.models import load_model

解决了我的问题!

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

答案 3 :(得分:4)

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

from tensorflow import keras

收件人:

import keras

生活再次值得生活。

答案 4 :(得分:3)

在kaggle或合作实验室中

tf.keras.models.load_model("model_path")

效果很好

答案 5 :(得分:1)

我遇到了同样的问题,并已通过这种方式解决。只是不要将优化器与模型一起保存! 只需这样更改保存行:

the_model.save(file_path,True/False,False)

第二个参数告诉Keras覆盖文件是否存在的模型,第三个告诉它不要将优化器与模型一起保存。


修改: 今天,我在另一个系统上再次遇到了这个问题,这次对我没有帮助。所以我将模型conf保存为json并将权重保存为h5,并使用它们在另一台计算机上重建模型。你可以这样 保存如下:

json = model.to_json()
# Save the json on a file
model.save_weights(weights_filepath,save_format="h5")

像这样重建模型:

# load the json file
# here i use json as loaded content of json file
model = keras.models.model_from_json(json)
model.load_weights(weights_file_path)

答案 6 :(得分:0)

Something帮助了我,但没有任何答案:

custom_objects={'GlorotUniform': glorot_uniform()}

答案 7 :(得分:0)

我对使用tensorflow 11.1.0构建的模型(使用tensorflow.python.keras.models.save_model)和加载Tensoflow 1.11.0(使用tensorflow.python.keras.models.load_model)的模型存在相同的问题。 / p>

我通过将所有内容升级到tensorflow 1.13.1来解决它,在使用新版本再次构建模型之后,我可以加载它而不会出现此错误。

答案 8 :(得分:0)

如果要分别加载架构和权重,而要加载模型更改的架构,则:

models.model_from_json(json)

至:

tf.keras.models.model_from_json(json)

问题已经解决

答案 9 :(得分:0)

from tensorflow.keras.initializers import glorot_uniform

loaded_model = tf.keras.models.load_model("pruned.h5",custom_objects={'GlorotUniform': glorot_uniform()})

这在导入tensorflow keras时对我有用

答案 10 :(得分:0)

对于@Derk在其中一条评论中提到的json文件问题,可以这样写:

model_from_json(model_path, custom_objects = {'GlorotUniform': glorot_uniform()})

在你的导入行中,记得写:

from tensorflow.keras.initializers import glorot_uniform

而不是from keras.initializers import glorot_uniform

当我尝试在只有 tf1.9 的环境中读取保存在 tf2.2 中的模型时,它对我有用。