Python バインディングで Tensorflow を使用するときに、テンソルを numpy 配列に変換するにはどうすればよいでしょうか?
ベストアンサー1
テンソルフロー2.x
熱心な実行デフォルトで有効になっているので、.numpy()
Tensor オブジェクト上。
import tensorflow as tf
a = tf.constant([[1, 2], [3, 4]])
b = tf.add(a, 1)
a.numpy()
# array([[1, 2],
# [3, 4]], dtype=int32)
b.numpy()
# array([[2, 3],
# [4, 5]], dtype=int32)
tf.multiply(a, b).numpy()
# array([[ 2, 6],
# [12, 20]], dtype=int32)
見るNumPy 互換性詳しくは、ドキュメントから引用します。
Numpy 配列は Tensor オブジェクトとメモリを共有する場合があります。一方に加えた変更は、もう一方に反映される可能性があります。
太字は私による強調です。コピーが返される場合と返されない場合があります。これは、データが CPU 内にあるか GPU 内にあるかに基づく実装の詳細です (後者の場合、GPU からホスト メモリにコピーを作成する必要があります)。
しかし、なぜAttributeError: 'Tensor' object has no attribute 'numpy'
?が表示されるのでしょうか。
この問題については多くの人がコメントしていますが、考えられる理由はいくつかあります。
- TF 2.0が正しくインストールされていない(その場合は再インストールを試してください)、または
- TF 2.0がインストールされているが、何らかの理由でEager実行が無効になっている。このような場合は、
tf.compat.v1.enable_eager_execution()
有効にするには、以下を参照してください。
Eager Execution が無効になっている場合は、グラフを作成してから実行することができますtf.compat.v1.Session
。
a = tf.constant([[1, 2], [3, 4]])
b = tf.add(a, 1)
out = tf.multiply(a, b)
out.eval(session=tf.compat.v1.Session())
# array([[ 2, 6],
# [12, 20]], dtype=int32)
参照TF 2.0 シンボルマップ古い API を新しい API にマッピングします。