[英]TensorFlow Hub error when Saving model as H5 or SavedModel
I want to use this TF Hub asset:https://tfhub.dev/google/imagenet/resnet_v1_50/feature_vector/3我想使用这个 TF Hub 资产:https ://tfhub.dev/google/imagenet/resnet_v1_50/feature_vector/3
Versions:版本:
Version: 1.15.0-dev20190726
Eager mode: False
Hub version: 0.5.0
GPU is available
Code代码
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))
I get:我得到:
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.
I tried:我试过:
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))
But when I try to save the model I get:但是当我尝试保存模型时,我得到:
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'>
It's been a while, but assuming you have migrated to the TF2, this can easily be accomplished with the most recent model version as follows:已经有一段时间了,但假设您已迁移到 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")
Please update this question if that doesn't work for you.如果这对您不起作用,请更新此问题。 I believe your issue arose from mixing hub.Module
with hub.KerasLayer
.我相信您的问题是由hub.Module
与hub.KerasLayer
混合hub.KerasLayer
。 The model version you were using was in TF1 Hub format, so within TF1 it is meant to be used exclusively with hub.Module
, and not mixed with hub.KerasLayer
.您使用的模型版本是 TF1 Hub 格式,因此在 TF1 中,它旨在专门与hub.Module
一起使用,而不是与hub.KerasLayer
混合使用。 Within TF2, hub.KerasLayer
can load TF1 Hub format models directly from their URL for composition in larger models, but they cannot be fine-tuned.在 TF2 中, hub.KerasLayer
可以直接从它们的 URL 加载 TF1 Hub 格式的模型以组合在更大的模型中,但它们不能被微调。
Please refer to this compatibility guide for more information请参阅此兼容性指南以获取更多信息
您应该使用tf.keras.models.save_model(model,'NeuralNetworkModel')
您将在一个文件夹中获得保存的模型,该文件夹可以稍后在您的顺序网络中使用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.