未知的初始值设定项:加载 Keras 模型时的 GlorotUniform
Unknown initializer: GlorotUniform when loading Keras model
我通过 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
我遇到了同样的问题,并已通过这种方式解决。只是不要将优化器与模型一起保存!
只需像这样更改保存行:
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)
我运行进入同样的问题。更改后:
from tensorflow import keras
至:
import keras
生活再次值得一过。
哇,我花了 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')
Something 对我有帮助,但没有在任何答案中:
custom_objects={'GlorotUniform': glorot_uniform()}
我解决了问题:
之前:
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')
我在使用 tensorflow 1.11.0(使用 tensorflow.python.keras.models.save_model)构建并加载 tensoflow 1.11.0(使用 tensorflow.python.keras.models.load_model)的模型时遇到了同样的问题。
我通过将所有内容升级到 tensorflow 1.13.1 解决了这个问题,在使用新版本再次构建模型后,我可以加载它而没有这个错误。
改变
from keras.models import load_model
至
from tensorflow.keras.models import load_model
解决了我的问题!
要消除错误,请直接从 Keras 或 TensorFlow 导入 所有 东西。将它们混合在同一个项目中可能会导致问题。
如果您分别加载架构和权重,同时加载模型的架构发生变化:
models.model_from_json(json)
至:
tf.keras.models.model_from_json(json)
问题解决
from tensorflow.keras.initializers import glorot_uniform
loaded_model = tf.keras.models.load_model("pruned.h5",custom_objects={'GlorotUniform': glorot_uniform()})
这在导入 tensorflow keras 时对我有用
在 kaggle 或 colabs 中
tf.keras.models.load_model("model_path")
效果很好
对于@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 中的模型时,它对我很有效。
我通过 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
我遇到了同样的问题,并已通过这种方式解决。只是不要将优化器与模型一起保存! 只需像这样更改保存行:
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)
我运行进入同样的问题。更改后:
from tensorflow import keras
至:
import keras
生活再次值得一过。
哇,我花了 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')
Something 对我有帮助,但没有在任何答案中:
custom_objects={'GlorotUniform': glorot_uniform()}
我解决了问题:
之前:
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')
我在使用 tensorflow 1.11.0(使用 tensorflow.python.keras.models.save_model)构建并加载 tensoflow 1.11.0(使用 tensorflow.python.keras.models.load_model)的模型时遇到了同样的问题。
我通过将所有内容升级到 tensorflow 1.13.1 解决了这个问题,在使用新版本再次构建模型后,我可以加载它而没有这个错误。
改变
from keras.models import load_model
至
from tensorflow.keras.models import load_model
解决了我的问题!
要消除错误,请直接从 Keras 或 TensorFlow 导入 所有 东西。将它们混合在同一个项目中可能会导致问题。
如果您分别加载架构和权重,同时加载模型的架构发生变化:
models.model_from_json(json)
至:
tf.keras.models.model_from_json(json)
问题解决
from tensorflow.keras.initializers import glorot_uniform
loaded_model = tf.keras.models.load_model("pruned.h5",custom_objects={'GlorotUniform': glorot_uniform()})
这在导入 tensorflow keras 时对我有用
在 kaggle 或 colabs 中
tf.keras.models.load_model("model_path")
效果很好
对于@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 中的模型时,它对我很有效。