Tensorflow Hub - 获取模型的输入形状和问题域?

Tensorflow Hub - get input shape and problem domain for models?

我正在使用最新版本的 tensorflow hub,想知道如何获取有关模型的预期输入形状以及模型所属集合类型的信息。 例如,有没有办法在 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")

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

还有一个问题:有没有办法以编程方式获取有关模型属于哪个“问题域”的信息?它可以在 https://tfhub.dev/ 上查找,但是如果需要从模型对象本身或通过 tensorflow_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

None -> 这个指定batch size的大小,推断batch size可以是你指定的任何值

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

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