38

TensorFlow は初めてです。tensor既存のドキュメントを読んでいるうちに、この用語が非常に紛らわしいことがわかりました。そのため、次の質問を明確にする必要があります。

  1. tensorVariabletensor
    vs. tf.constant、「テンソル」 vs.の関係は何tf.placeholderですか?
  2. それらはすべてテンソルのタイプですか?
4

4 に答える 4

67

TensorFlow にはファーストクラスの Tensor オブジェクトがありませんTensor。つまり、ランタイムによって実行される基礎となるグラフには の概念がありません。代わりに、グラフは操作を表す、互いに接続された op ノードで構成されます。:0操作は、エンドポイント、などで使用可能な出力にメモリを割り当てます。:1これらの各エンドポイントはTensor. tensorに対応している場合nodename:0は、その値をsess.run(tensor)またはとして取得できますsess.run('nodename:0')。実行の粒度は操作レベルで発生するため、runメソッドは op を実行し、エンドポイントだけでなくすべてのエンドポイントを計算し:0ます。出力のない Op ノードを持つことも可能です (tf.group) この場合、関連付けられたテンソルはありません。基礎となる Op ノードなしでテンソルを持つことはできません。

このようなことを行うことで、基になるグラフで何が起こるかを調べることができます

tf.reset_default_graph()
value = tf.constant(1)
print(tf.get_default_graph().as_graph_def())

したがって、単一の操作ノードを取得すると、またはtf.constantを使用して取得できますsess.run("Const:0")sess.run(value)

同様に、value=tf.placeholder(tf.int32)name の通常のノードを作成し、またはPlaceholderとしてフィードできます。同じ呼び出しでプレースホルダーをフィードしてフェッチすることはできませんが、ノードを上にアタッチしてフェッチすることで結果を確認できます。feed_dict={"Placeholder:0":2}feed_dict={value:2}session.runtf.identity

変数用

tf.reset_default_graph()
value = tf.Variable(tf.ones_initializer()(()))
value2 = value+3
print(tf.get_default_graph().as_graph_def())

Variable2 つのノードとが作成されることがわかります。エンドポイントはVariable/read:0これらのノードの両方でフェッチする有効な値です。ただし、変更操作への入力として使用できることを意味Variable:0する特別な型があります。refPython 呼び出しの結果はtf.VariablePythonオブジェクトであり、変更が必要かどうかに応じてVariable、置換する Python マジックがいくつかあります。ほとんどの op にはエンドポイントが 1 つしかないため、ドロップされます。もう 1 つの例は--メソッドは、op に接続する新しいop ノードを作成します。要約すると、Python オブジェクトに対する操作は、使用状況に応じて、基礎となるさまざまな TensorFlow op ノードにマッピングされます。Variable/read:0Variable:0:0Queueclose()CloseQueueVariableQueue

複数のエンドポイントを持つノードを作成するような操作のtf.split場合tf.nn.top_k、Python の呼び出しは、個別にフェッチできるオブジェクト内またはオブジェクトのsession.run出力を自動的にラップします。tuplecollections.namedtupleTensor

于 2016-06-16T22:51:35.910 に答える
14

用語集から:

Tensor は、型付きの多次元配列です。たとえば、寸法 [バッチ、高さ、幅、チャネル] を持つ画像のミニバッチを表す浮動小数点数の 4 次元配列。

基本的に、すべてのデータは TensorFlow の Tensor です (名前の由来):

  • プレースホルダーは、値をフィードできるテンソルです ( のfeed_dict引数を使用sess.run())
  • 変数は、( で) 更新できるテンソルですvar.assign()。技術的に言えば、tf.Variableのサブクラスではありませんtf.Tensor
  • tf.constant最も基本的な Tensor であり、作成時に指定された固定値を含みます

ただし、グラフでは、すべてのノードが操作であり、テンソルを入力または出力として持つことができます。

于 2016-06-16T08:48:38.163 に答える