Попробуйте использовать "load_model", но он создает новый с 0 слоями

Я хочу загрузить новую точно настроенную модель с помощью load_model. Но я не загружаю, а просто создаю новый пустой. Модель была построена в той же среде с теми же версиями Keras и Python. Примеры кодов делают то же самое.

модель = load_weights тоже не работает

from google.colab import drive
drive.mount('/content/gdrive')

from keras import models
from keras.models import load_model
import keras
print(keras.__version__)

model = load_model('/content/gdrive/My Drive/Bachelor/DATA/FullMoblieNet.h5')

Вот мой вывод

Drive already mounted at /content/gdrive; to attempt to forcibly remount, call drive.mount("/content/gdrive", force_remount=True).
2.2.4
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-20-520e70aa6dbd> in <module>()
      7 import keras
      8 print(keras.__version__)
----> 9 model = load_model('/content/gdrive/My Drive/Bachelor/DATA/FullMoblieNet.h5')

1 frames
/usr/local/lib/python3.6/dist-packages/keras/engine/saving.py in _deserialize_model(f, custom_objects, compile)
    256         raise ValueError('You are trying to load a weight file'
    257                          ' containing {} layers into a model with {} layers'
--> 258                          .format(len(layer_names), len(filtered_layers))
    259                          )
    260 

ValueError: You are trying to load a weight file containing 51 layers into a model with 0 layers

Я пытаюсь поместить это в мою конструкцию MobileNet, но она все еще не работает с той же ошибкой.

from google.colab import drive
drive.mount('/content/gdrive')

from keras import models
from keras.models import load_model

from keras import models
from keras import layers
from keras import optimizers

from keras.layers import Dense, Input, Layer
from keras.models import Model
from keras.applications.mobilenet import MobileNet
-----------------------New Code-------------------------------
mobile = MobileNet(input_shape=(224,224,3), alpha=1.0, depth_multiplier=1, dropout=1e-3, include_top=False, weights='imagenet')

model = models.Sequential()

for layer in mobile.layers[:-6]:
    model.add(layer)

model.add(layers.Flatten())
model.add(layers.Dense(7, activation='softmax'))


for layer in model.layers[:-5]:
    layer.trainable = False

model.compile(loss='categorical_crossentropy',
              optimizer=optimizers.RMSprop(lr=1e-4),
              metrics=['acc'])    
--------------------------------new End-------------------
model = load_model('/content/gdrive/My Drive/Bachelor/DATA/FullMoblieNet.h5')

1 ответ

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

def your_model():

    #model definition
    model.compile()

    return model

your_model = your_model()

your_model = load_model('/content/gdrive/My Drive/Bachelor/DATA/FullMoblieNet.h5')

Это должно работать, держи меня в курсе!

Другие вопросы по тегам