tensorflow - 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
函数访问该信息怎么办?
谢谢!
解决方案
您可以通过访问模型的第一层和访问该层的 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 绘制模型的图形,并可以从模型的架构中推断域。
推荐阅读
- javascript - 使用单选按钮显示/隐藏具有相同类的多个 DIV
- mysql - 如何获得 MariaDB 的当前值?
- assembly - 组装测验 - 阶段 6
- javascript - 无法在 html 中呈现 JSON - node.js
- isabelle - 什么样的函数保留了闭包的性质?
- javascript - JS - 将字符串值转换为数字、布尔值或字符串的最佳方法?
- c - Cygwin makefile 编译找不到 -lregex
- c# - 未创建使用 smtp 客户端线程的 gmail 重播
- javascript - 如何在不使用 JavaScript 中的减号运算符的情况下减去两个数字?或使用 For 循环
- android - 如何在 kodein 中调用的第二时间重新绑定模块?