【问题标题】:TensorFlow 2.0 & TensorFlow Hub: load_module_spec equivalent?TensorFlow 2.0 和 TensorFlow Hub:load_module_spec 等效?
【发布时间】:2019-05-24 22:57:17
【问题描述】:

当使用 TensorFlow 1.x 和 TensorFlow hub 时,我们可以像这样加载模块的规范来检查预期的输出形状(可能还有其他有用的规范!):

spec = hub.load_module_spec("https://tfhub.dev/google/nnlm-en-dim128/1")
shape = spec.get_output_info_dict()['default'].get_shape()

当尝试对兼容 TF 2.0 的集线器模块执行相同操作时,我在调用 load_module_spec 时遇到以下错误消息:

缺少支持: loader(*('/tmp/tfhub_modules/82c4aaf4250ffb09088bd48368ee7fd00e5464fe',), **{})

是否有其他方法可以检查 TF 2.0 集线器模块的输出形状?

【问题讨论】:

    标签: python tensorflow tensorflow-hub


    【解决方案1】:

    对于 TensorFlow 2,TF Hub 将切换为提供 TF2 的原生基于对象的 SavedModel [doc, RFC]。这些由tf.saved_model.load() 加载(如果已经在您的文件系统上),或hub.load() 加载,可选择从URL 下载。这为您提供了一个恢复的 Trackable 对象,其中包含一个行为类似于 @tf.function__call__ 成员,这意味着它具有一个或多个具体函数,每个函数都由 TF 图支持,并基于张量形状/dtypes 在它们之间进行调度和非张量参数。

    在 TF2 的当前 alpha 版本中,如果您知道输入的允许 TensorSpec,您可以向下钻取到输出,例如:

    loaded_model = hub.load("https://tfhub.dev/google/tf2-preview/nnlm-en-dim128/1")
    concrete_function = loaded_model.__call__.get_concrete_function(
        tf.TensorSpec((None,), tf.string))
    print(concrete_function.output_shapes, ":",
          concrete_function.output_dtypes)
    

    这给了我

    (None, 128) : <dtype: 'float32'>
    

    【讨论】:

      猜你喜欢
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 2021-10-05
      • 2018-09-20
      相关资源
      最近更新 更多