TensorflowでテンソルをNumPy配列に変換しますか?質問する

TensorflowでテンソルをNumPy配列に変換しますか?質問する

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 にマッピングします。

おすすめ記事