Ошибка TensorFlow Hub при сохранении модели как H5 или SavedModel

Я хочу использовать этот ресурс TF Hub: https://tfhub.dev/google/imagenet/resnet_v1_50/feature_vector/3

Версии:

Version:  1.15.0-dev20190726
Eager mode:  False
Hub version:  0.5.0
GPU is available

Код

feature_extractor_url = "https://tfhub.dev/google/imagenet/resnet_v1_50/feature_vector/3"
feature_extractor_layer = hub.KerasLayer(module,
                                         input_shape=(HEIGHT, WIDTH, CHANNELS))

Я получил:

ValueError: Importing a SavedModel with tf.saved_model.load requires a 'tags=' argument if there is more than one MetaGraph. Got 'tags=None', but there are 2 MetaGraphs in the SavedModel with tag sets [[], ['train']]. Pass a 'tags=' argument to load this SavedModel.

Я пытался:

module = hub.Module("https://tfhub.dev/google/imagenet/resnet_v1_50/feature_vector/3",
                    tags={"train"})
feature_extractor_layer = hub.KerasLayer(module, 
                                         input_shape=(HEIGHT, WIDTH, CHANNELS))

Но когда я пытаюсь сохранить модель, я получаю:

tf.keras.experimental.export_saved_model(model, tf_model_path)
# model.save(h5_model_path) # Same error 

NotImplementedError: Can only generate a valid config for `hub.KerasLayer(handle, ...)`that uses a string `handle`.
Got `type(handle)`: <class 'tensorflow_hub.module.Module'>

Учебник здесь

2 ответа

Решение

Прошло некоторое время, но если вы перешли на TF2, это можно легко сделать с помощью самой последней версии модели следующим образом:

      import tensorflow as tf
import tensorflow_hub as hub

num_classes=10 # For example
m = tf.keras.Sequential([
    hub.KerasLayer("https://tfhub.dev/google/imagenet/resnet_v1_50/feature_vector/5", trainable=True)
    tf.keras.layers.Dense(num_classes, activation='softmax')
])
m.build([None, 224, 224, 3])  # Batch input shape.

# train as needed

m.save("/some/output/path")

Обновите этот вопрос, если это не сработает для вас. Я считаю, что ваша проблема возникла в результате смешивания с. Версия модели, которую вы использовали, была в формате TF1 Hub, поэтому в TF1 она предназначена для использования исключительно с , а не смешанный с. Внутри TF2 могут загружать модели формата TF1 Hub прямо из их URL-адреса для композиции в более крупных моделях, но их нельзя точно настроить.

Пожалуйста, обратитесь к по этому руководствусовместимости для получения дополнительной информации.

Вы должны использовать tf.keras.models.save_model(model,'NeuralNetworkModel')Вы получите сохраненную модель в папке, которую можно будет использовать позже в вашей последовательной работе.

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