1. ホーム
  2. パイソン

[解決済み】TensorFlowでTensorオブジェクトの値を表示する方法は?

2022-04-14 16:33:09

質問

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 ?

解決方法は?

最も簡単な方法 <上 [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 で指定することで、実行されるopの制御依存としてopを使用することができます。 tf.compat.v1.control_dependencies([print_op] ) が、標準出力に出力される。

また、次のことにも注意してください。

Jupyterノートブックやcolabで。 tf.print はノートブックのセル出力に印刷します。ノートブックカーネルのコンソールログには書き込まれません。

[B]: あなたは かもしれない が使えるようになる。 tf.get_static_value() 関数を使って、与えられたテンソルの定数値を得ることができる。