TensorFlow は初めてです。tensor既存のドキュメントを読んでいるうちに、この用語が非常に紛らわしいことがわかりました。そのため、次の質問を明確にする必要があります。
tensorとVariable、tensor
vs.tf.constant、「テンソル」 vs.の関係は何tf.placeholderですか?- それらはすべてテンソルのタイプですか?
TensorFlow は初めてです。tensor既存のドキュメントを読んでいるうちに、この用語が非常に紛らわしいことがわかりました。そのため、次の質問を明確にする必要があります。
tensorとVariable、tensortf.constant、「テンソル」 vs.の関係は何tf.placeholderですか?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
用語集から:
Tensor は、型付きの多次元配列です。たとえば、寸法 [バッチ、高さ、幅、チャネル] を持つ画像のミニバッチを表す浮動小数点数の 4 次元配列。
基本的に、すべてのデータは TensorFlow の Tensor です (名前の由来):
feed_dict引数を使用sess.run())var.assign()。技術的に言えば、tf.Variableのサブクラスではありませんtf.Tensorがtf.constant最も基本的な Tensor であり、作成時に指定された固定値を含みますただし、グラフでは、すべてのノードが操作であり、テンソルを入力または出力として持つことができます。