0

TensorFlow 1.x と TensorFlow ハブを使用する場合、次のようにモジュールの仕様をロードして、予想される出力形状 (およびおそらく他の有用な仕様も!) を調べることができます。

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 ハブ モジュールの出力形状を調べる別の方法はありますか?

4

1 に答える 1

1

TensorFlow 2 の場合、TF Hub は TF2 のネイティブ オブジェクト ベースの SavedModels [ docRFC ] の出荷に切り替えます。これらはtf.saved_model.load()、すでにファイルシステムにある場合、またはhub.load()オプションで URL からダウンロードしてロードされます。これにより、 のように動作するメンバーを持つ復元されたTrackableオブジェクトが得られます。つまり、1 つ以上の具体的な関数があり、それぞれが TF グラフに支えられており、Tensor 形状/dtype と非 Tensor 引数に基づいてそれらの間でディスパッチされます。__call__@tf.function

TF2 の現在のアルファ版では、入力に許容される 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'>
于 2019-05-24T14:57:17.307 に答える