Неизвестный инициализатор: GlorotUniform при загрузке модели 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

Ответ 1

Я столкнулся с тем же вопросом. После изменения:

from tensorflow import keras

чтобы:

import keras

жизнь снова стоит того, чтобы жить.

Ответ 2

Ничего себе, я только что потратил 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')

Ответ 3

Я исправил проблему:

До:

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

Ответ 4

изменения

from keras.models import load_model

в

from tensorflow.keras.models import load_model

решил мою проблему!

Чтобы устранить ошибки, импортируйте все прямо из Keras или TensorFlow. Смешивание их обоих в одном проекте может привести к проблемам.

Ответ 5

Что-то, что помогло мне, чего не было ни в одном из ответов:

custom_objects={'GlorotUniform': glorot_uniform()}

Ответ 6

У меня была такая же проблема, и я был исправлен таким образом. просто не экономьте оптимизатор с моделью! просто измените строку сохранения следующим образом:

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)

Ответ 7

У меня была та же проблема с моделью, созданной с tenorflow 11.1.0 (с использованием tennflow.python.keras.models.save_model) и загруженной с помощью tenenslow 1.11.0 (tenensflow.python.keras.models.load_model).

Я решил эту проблему, обновив все до tenorflow 1.13.1, после повторного построения модели с новой версией я мог загрузить ее без этой ошибки.

Ответ 8

если вы загружаете архитектуру и веса отдельно, при загрузке архитектуры модели измените:

models.model_from_json(json)

к:

tf.keras.models.model_from_json(json)

и проблема решена

Ответ 9

from tensorflow.keras.initializers import glorot_uniform

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

это сработало для меня при импорте тензор потока кера