首页 > 解决方案 > Tensorflow Hub - 获取模型的输入形状和问题域?

问题描述

我正在使用最新版本的 tensorflow 集线器,想知道如何获取有关模型预期输入形状的信息,以及模型所属的集合类型。例如,以这种方式在 Python 中加载模型后,有没有办法获取有关预期图像形状的信息?

model = hub.load("https://tfhub.dev/tensorflow/faster_rcnn/inception_resnet_v2_640x640/1")

还是这样?

model = hub.KerasLayer("https://tfhub.dev/tensorflow/faster_rcnn/inception_resnet_v2_640x640/1")

在这两种情况下,模型对象似乎都不知道预期的形状是什么——无论是在图像高度/宽度和批量大小方面。另一方面,可以通过load_module_spec旧 TF 模型找到此信息...

还有一个问题:有没有办法以编程方式获取模型属于哪个“问题域”的信息?可以在https://tfhub.dev/上查找它,但是如果需要从模型对象本身或通过tensorflow_hub函数访问该信息怎么办?

谢谢!

标签: tensorflowkerastensorflow2.0keras-layertensorflow-hub

解决方案


您可以通过访问模型的第一层和访问该层的 input_shape 属性来获得模型期望的输入形状

layers = model.layers
first_layer = layers[0] # usually the first layer is the input layer
print(first_layer.input_shape)

输出:

[(None, 100, 100, 3)] # sample output

无 -> 这指定批量大小的大小,推断是批量大小可以是您指定的任何内容

(100, 100, 3) -> 高度、宽度和通道可以变化,您提供的输入数据应该严格相同。

通过编程找到训练模型的域有点棘手,您可以使用 tensorflow.keras.util.plot_model 绘制模型的图形,并可以从模型的架构中推断域。


推荐阅读