TensorFlow は初めてです。tensor
既存のドキュメントを読んでいるうちに、この用語が非常に紛らわしいことがわかりました。そのため、次の質問を明確にする必要があります。
tensor
とVariable
、tensor
vs.tf.constant
、「テンソル」 vs.の関係は何tf.placeholder
ですか?- それらはすべてテンソルのタイプですか?
TensorFlow は初めてです。tensor
既存のドキュメントを読んでいるうちに、この用語が非常に紛らわしいことがわかりました。そのため、次の質問を明確にする必要があります。
tensor
とVariable
、tensor
tf.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.run
tf.identity
変数用
tf.reset_default_graph()
value = tf.Variable(tf.ones_initializer()(()))
value2 = value+3
print(tf.get_default_graph().as_graph_def())
Variable
2 つのノードとが作成されることがわかります。エンドポイントはVariable/read
、:0
これらのノードの両方でフェッチする有効な値です。ただし、変更操作への入力として使用できることを意味Variable:0
する特別な型があります。ref
Python 呼び出しの結果はtf.Variable
Pythonオブジェクトであり、変更が必要かどうかに応じてVariable
、置換する Python マジックがいくつかあります。ほとんどの op にはエンドポイントが 1 つしかないため、ドロップされます。もう 1 つの例は--メソッドは、op に接続する新しいop ノードを作成します。要約すると、Python オブジェクトに対する操作は、使用状況に応じて、基礎となるさまざまな TensorFlow op ノードにマッピングされます。Variable/read:0
Variable:0
:0
Queue
close()
Close
Queue
Variable
Queue
複数のエンドポイントを持つノードを作成するような操作のtf.split
場合tf.nn.top_k
、Python の呼び出しは、個別にフェッチできるオブジェクト内またはオブジェクトのsession.run
出力を自動的にラップします。tuple
collections.namedtuple
Tensor
用語集から:
Tensor は、型付きの多次元配列です。たとえば、寸法 [バッチ、高さ、幅、チャネル] を持つ画像のミニバッチを表す浮動小数点数の 4 次元配列。
基本的に、すべてのデータは TensorFlow の Tensor です (名前の由来):
feed_dict
引数を使用sess.run()
)var.assign()
。技術的に言えば、tf.Variable
のサブクラスではありませんtf.Tensor
がtf.constant
最も基本的な Tensor であり、作成時に指定された固定値を含みますただし、グラフでは、すべてのノードが操作であり、テンソルを入力または出力として持つことができます。