Ответ 1
Я столкнулся с тем же вопросом. После изменения:
from tensorflow import keras
чтобы:
import keras
жизнь снова стоит того, чтобы жить.
Я тренировал свой CNN (VGG) через google colab и сгенерировал файл.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
Я столкнулся с тем же вопросом. После изменения:
from tensorflow import keras
чтобы:
import keras
жизнь снова стоит того, чтобы жить.
Ничего себе, я только что потратил 6 часов своей жизни, пытаясь это выяснить. Дмитрий разместил здесь решение: я обучил модель keras на Google Colab. Теперь не могу загрузить его локально в моей системе.
Я просто в основном репостил здесь, потому что это сработало для меня.
Это похоже на какую-то ошибку сериализации в керасе. Если вы оберните свой load_model нижеприведенным CustomObjectScope, все должно работать..
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')
Я исправил проблему:
До:
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')
изменения
from keras.models import load_model
в
from tensorflow.keras.models import load_model
решил мою проблему!
Чтобы устранить ошибки, импортируйте все прямо из Keras или TensorFlow. Смешивание их обоих в одном проекте может привести к проблемам.
Что-то, что помогло мне, чего не было ни в одном из ответов:
custom_objects={'GlorotUniform': glorot_uniform()}
У меня была такая же проблема, и я был исправлен таким образом. просто не экономьте оптимизатор с моделью! просто измените строку сохранения следующим образом:
the_model.save(file_path,True/False,False)
Второй параметр указывает Keras на перезапись модели, если файл существует или нет, а третий - не сохранять оптимизатор с моделью.
Редактировать: я снова столкнулся с проблемой в другой системе, и на этот раз мне это не помогло. поэтому я сохранил модель conf как json и hights как 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)
У меня была та же проблема с моделью, созданной с tenorflow 11.1.0 (с использованием tennflow.python.keras.models.save_model) и загруженной с помощью tenenslow 1.11.0 (tenensflow.python.keras.models.load_model).
Я решил эту проблему, обновив все до tenorflow 1.13.1, после повторного построения модели с новой версией я мог загрузить ее без этой ошибки.
если вы загружаете архитектуру и веса отдельно, при загрузке архитектуры модели измените:
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()})
это сработало для меня при импорте тензор потока кера