web-dev-qa-db-ja.com

TensorFlowで用語「テンソル」を理解する方法は?

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

  1. tensorVariabletensorの関係は何ですか
    vs。 tf.constant、「テンソル」とtf.placeholder
  2. 彼らはすべてのタイプのテンソルですか?
34
ZijunLost

TensorFlowにはファーストクラスのTensorオブジェクトがありません。つまり、ランタイムによって実行される基礎となるグラフにはTensorという概念はありません。代わりに、グラフは、操作を表す互いに接続されたopノードで構成されます。操作は、エンドポイント:0:1などで使用可能な出力にメモリを割り当てます。これらの各エンドポイントはTensorと考えることができます。 nodename:0に対応するtensorがある場合、その値を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)Placeholderという名前の通常のノードを作成し、feed_dict={"Placeholder:0":2}またはfeed_dict={value:2}としてフィードできます。同じsession.run呼び出しでプレースホルダーをフィードおよびフェッチすることはできませんが、tf.identityノードを上部にアタッチしてフェッチすることで結果を確認できます。

変数用

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

2つのノードVariableおよびVariable/readを作成することがわかります。:0エンドポイントは、これらのノードの両方でフェッチする有効な値です。ただし、Variable:0には特別なref型があり、これは変更操作への入力として使用できることを意味します。 Python呼び出しtf.Variableの結果はPython Variableオブジェクトであり、Variable/read:0またはVariable:0に代わるいくつかのPythonマジックがあります突然変異が必要かどうか。ほとんどのopには1つのエンドポイントしかないため、:0は削除されます。別の例はQueueです-close()メソッドは、Close opに接続する新しいQueue opノードを作成します。要約すると、VariableQueueのようなpythonオブジェクトの操作は、使用法に応じて異なる基になるTensorFlow opノードにマッピングされます。

複数のエンドポイントを持つノードを作成するtf.splittf.nn.top_kなどのopsの場合、Pythonのsession.run呼び出しは、TupleまたはTensorオブジェクトのcollections.namedtupleで出力を自動的にラップします個別に取得できます。

60

用語集 から:

テンソルは、型指定された多次元配列です。たとえば、寸法[バッチ、高さ、幅、チャネル]の画像のミニバッチを表す浮動小数点数の4次元配列。

基本的に、すべてのdataはTensorFlowのテンソルです(名前の由来):

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

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

13

他の人がすでに述べたように、はい、それらはすべてテンソルです。

私がそれらを理解したのは、下の図のように、最初に1D、2D、3D、4D、5D、および6Dテンソルを視覚化して理解することです。 (ソース:knoldus

tensor-definition

TensorFlowのコンテキストでは、次のような計算グラフを想像できます。

computation-graph

ここで、Opsは2つのテンソルabinputとして取ります。 テンソルとそれ自体を乗算し、次にaddsこれらの乗算の結果を結果テンソルを生成しますt3。そして、これらのmultiplicationsadditionOpsは計算グラフのノード。

そして、これらのテンソルaおよびbは、定数テンソル、可変テンソル、またはプレースホルダーにすることができます。同じデータ型と互換性のある形状(またはbroadcastable)が達成される限り、それは問題ではありません。操作。

7
kmario23

TensorFlowの中心的なデータ型はテンソルです。テンソルは、計算の基礎となるコンポーネントであり、TensorFlowの基本的なデータ構造です。複雑な数学的解釈を使用することなく、テンソル(TensorFlow内)は、ランク、形状、およびタイプによって決定されるゼロまたはn次元のデータコレクションを持つ多次元数値配列を記述することができます。詳細: テンソルとはTensorFlow?

0
Amit Arora