TensorFlow での行列乗算の入門例を使用してきました。
matrix1 = tf.constant([[3., 3.]])
matrix2 = tf.constant([[2.],[2.]])
product = tf.matmul(matrix1, matrix2)
製品を印刷すると、Tensor
オブジェクトとして表示されます。
<tensorflow.python.framework.ops.Tensor object at 0x10470fcd0>
しかし、 の値はどうすればわかるのでしょうかproduct
?
以下は役に立ちません:
print product
Tensor("MatMul:0", shape=TensorShape([Dimension(1), Dimension(1)]), dtype=float32)
グラフが で実行されることは知っていますが、でグラフを実行せずにオブジェクトSessions
の出力を確認する方法はないのでしょうか?Tensor
session
ベストアンサー1
オブジェクトの実際の値を評価する最も簡単な方法[A]Tensor
は、メソッドに渡すかSession.run()
、Tensor.eval()
デフォルトのセッションがあるときに呼び出すことです (つまり、with tf.Session():
ブロック内、または以下を参照)。一般に[B]、セッションで何らかのコードを実行せずにテンソルの値を印刷することはできません。
プログラミングモデルを試していて、テンソルを簡単に評価したい場合は、tf.InteractiveSession
プログラムの開始時にセッションを開き、そのセッションをすべてのTensor.eval()
(およびOperation.run()
) 呼び出しに使用できます。オブジェクトをあちこちに渡すのが面倒な場合、シェルや IPython ノートブックなどの対話型設定ではこれが簡単になりますSession
。たとえば、次のコードは Jupyter ノートブックで機能します。
with tf.Session() as sess: print(product.eval())
このような小さな式ではこれは馬鹿げているように思えるかもしれませんが、Tensorflow 1.x の重要なアイデアの 1 つは遅延実行です。これは、大規模で複雑な式の構築コストが非常に低く、それを評価したいときに、バックエンド ( で接続するSession
) でその実行をより効率的にスケジュールできます (たとえば、独立した部分を並列で実行し、GPU を使用します)。
[A]: テンソルの値をPythonプログラムに返さずに印刷するには、tf.print()
演算子としてAndrzejは別の回答で示唆している公式ドキュメントによると:
演算子が確実に実行されるようにするには、生成された op を の
tf.compat.v1.Session
run メソッドに渡すか、 を指定して op を実行された op の制御依存関係として使用する必要がありますtf.compat.v1.control_dependencies([print_op]
。これは標準出力に印刷されます。
また、次の点にも注意してください。
Jupyter ノートブックおよび Colabs では、
tf.print
ノートブック セル出力に出力されます。ノートブック カーネルのコンソール ログには書き込まれません。
[B]:使えるかもしれないtf.get_static_value()
与えられたテンソルの値が効率的に計算可能な場合にその定数値を取得する関数。