Как исправить '' ValueError: вход 0 несовместим с выравниванием слоя: ожидается min_ndim = 3, найдена ошибка ndim = 2 "при загрузке модели - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь сохранить и загрузить мою модель keras. Он тренируется, оценивает и сохраняет нормально (используя .h5 для сохранения модели), но когда я пытаюсь загрузить модель, я получаю следующую ошибку: ValueError: Ввод 0 несовместим с выравниванием слоя: ожидаемый min_ndim = 3, найденный ndim = 2. Я загружаю модель неправильно? Любая помощь будет оценена!

Это блок кода, из которого я сохраняю модель.

    def ml(self):
            model = tf.keras.models.Sequential()
            model.add(tf.keras.layers.Flatten())
            self.addLayer(model,145,6)
            model.add(tf.keras.layers.Dense(1))

            optimizer = tf.keras.optimizers.Adam()

            model.compile(loss='mean_squared_error',
                              optimizer=optimizer,
                              metrics=['mean_absolute_error', 
                                       'mean_squared_error'])

            model.fit(self.x_train, self.y_train,epochs=130)


            lm = model.evaluate(self.x_test, self.y_test, batch_size=300)
            model.save('my_model.h5')


    def addLayer(self, model, numNodes, numLayers):
            for i in range(numLayers):
                model.add(tf.keras.layers.Dense(numNodes,activation=tf.nn.relu))

Чтобы загрузить из другого скрипта:

    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(mlPath)

При попытке загрузить модель я получаю следующую ошибку:

ValueError: вход 0 несовместим со сглаживанием слоя: ожидаемый min_ndim = 3, найденный ndim = 2

1 Ответ

0 голосов
/ 03 июля 2019

вы можете попытаться сохранить только веса вашей модели, затем воссоздать ее, используя точно такой же код, и загрузить только веса. так что поменяй

model.save

до

model.save_weights('my_model.h5')

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

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten())
self.addLayer(model,145,6)
model.add(tf.keras.layers.Dense(1))

и наконец загрузите веса:

model.load_weights('my_model.h5')

Это сработало для меня. Кроме того, вы можете добавить входной слой вместе с явным input_shape в вашей модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...