keras.module.load_model поднять TypeError ('Аргумент ключевого слова не понят:', kwarg) - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь выполнить обучение переносу по мобильной сети, используя Keras и базу данных Flower, предоставленную, например, в tf. Обучение работает хорошо, и я выполняю прогнозы, но я не могу сохранить модель для будущего использования, поэтому мне приходится каждый раз проводить обучение.

Я работаю над MACOS Mojave с python 3.7 и последним обновлением Keras, уже выполненным pip --upgrade keras.

feature_extractor_url = "https://tfhub.dev/google/imagenet/mobilenet_v2_100_224/feature_vector/2" #@param {type:"string"}

# Create the module, and check the expected image size:
def feature_extractor(x):
  feature_extractor_module = hub.Module(feature_extractor_url)
  return feature_extractor_module(x)

IMAGE_SIZE = hub.get_expected_image_size(hub.Module(feature_extractor_url))

# Ensure the data generator is generating images of the expected size:
image_data = image_generator.flow_from_directory(str(data_root), target_size=IMAGE_SIZE, subset='training')
test_data = image_generator.flow_from_directory(str(data_root), target_size=IMAGE_SIZE, subset='validation')

# Wrap the module in a keras layer.
features_extractor_layer = layers.Lambda(feature_extractor, input_shape=IMAGE_SIZE+[3])
# Freeze the variables in the feature extractor layer, so that the training only modifies the new classifier layer.
features_extractor_layer.trainable = False

# Attach a classification head
# Now wrap the hub layer in a tf.keras.Sequential model, and add a new classification layer.
model = tf.keras.Sequential([
  features_extractor_layer,
  layers.Dense(image_data.num_classes, activation='softmax')
])

# Initialize the TFHub module.
import tensorflow.keras.backend as K
sess = K.get_session()
init = tf.global_variables_initializer()
sess.run(init)

# Train the model
model.compile(
  optimizer= tf.keras.optimizers.Adam(),
  loss='categorical_crossentropy',
  metrics=['accuracy'])

model.fit((item for item in image_data), epochs=1,
                    steps_per_epoch=steps_per_epoch,
                    callbacks = [batch_stats])

model.save("./saved_models/flower_model.h5")

del model

from keras.models import load_model
model = load_model('./saved_models/flower_model.h5')
model.summary()

model.save () работает нормально, файл flower_model.h5 правильно создан в каталоге, но при запуске load_model () выводится ошибка:

Using TensorFlow backend.
Traceback (most recent call last):
  File "/Users/david/Library/Preferences/PyCharmCE2018.2/scratches/retrain_flowers.py", line 114, in <module>
    model = load_model('./saved_models/flower_model.h5')
  File "/Users/david/Library/Python/3.7/lib/python/site-packages/keras/engine/saving.py", line 419, in load_model
    model = _deserialize_model(f, custom_objects, compile)
  File "/Users/david/Library/Python/3.7/lib/python/site-packages/keras/engine/saving.py", line 225, in _deserialize_model
    model = model_from_config(model_config, custom_objects=custom_objects)
  File "/Users/david/Library/Python/3.7/lib/python/site-packages/keras/engine/saving.py", line 458, in model_from_config
    return deserialize(config, custom_objects=custom_objects)
  File "/Users/david/Library/Python/3.7/lib/python/site-packages/keras/layers/__init__.py", line 55, in deserialize
    printable_module_name='layer')
  File "/Users/david/Library/Python/3.7/lib/python/site-packages/keras/utils/generic_utils.py", line 145, in deserialize_keras_object
    list(custom_objects.items())))
  File "/Users/david/Library/Python/3.7/lib/python/site-packages/keras/engine/sequential.py", line 300, in from_config
    custom_objects=custom_objects)
  File "/Users/david/Library/Python/3.7/lib/python/site-packages/keras/layers/__init__.py", line 55, in deserialize
    printable_module_name='layer')
  File "/Users/david/Library/Python/3.7/lib/python/site-packages/keras/utils/generic_utils.py", line 145, in deserialize_keras_object
    list(custom_objects.items())))
  File "/Users/david/Library/Python/3.7/lib/python/site-packages/keras/layers/core.py", line 764, in from_config
    return cls(**config)
  File "/Users/david/Library/Python/3.7/lib/python/site-packages/keras/legacy/interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)
  File "/Users/david/Library/Python/3.7/lib/python/site-packages/keras/layers/core.py", line 626, in __init__
    super(Lambda, self).__init__(**kwargs)
  File "/Users/david/Library/Python/3.7/lib/python/site-packages/keras/engine/base_layer.py", line 128, in __init__
    raise TypeError('Keyword argument not understood:', kwarg)
TypeError: ('Keyword argument not understood:', 'module')

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

...