回答:
NumPy配列によって返される、Session.run
またはeval
NumPy配列であるテンソル。
>>> print(type(tf.Session().run(tf.constant([1,2,3]))))
<class 'numpy.ndarray'>
または:
>>> sess = tf.InteractiveSession()
>>> print(type(tf.constant([1,2,3]).eval()))
<class 'numpy.ndarray'>
または、同等に:
>>> sess = tf.Session()
>>> with sess.as_default():
>>> print(type(tf.constant([1,2,3]).eval()))
<class 'numpy.ndarray'>
EDIT:ない任意のテンソルで返されるSession.run
か、eval()
numpyの配列です。たとえば、スパーステンソルはSparseTensorValueとして返されます。
>>> print(type(tf.Session().run(tf.SparseTensor([[0, 0]],[1],[1,2]))))
<class 'tensorflow.python.framework.sparse_tensor.SparseTensorValue'>
テンソル配列をnumpy配列に戻す.eval()
には、変換されたテンソルで実行するだけです。
ValueError: Cannot evaluate tensor using 'eval()': No default session is registered. Use 'with sess.as_default()' or pass an explicit session to 'eval(session=sess)'
のみtensoflowセッション中にこの使用可能ですか?
.eval()
:セッション内からのメソッド呼び出し sess = tf.Session(); with sess.as_default(): print(my_tensor.eval())
Eager Executionはデフォルトで有効になっているため.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配列はTensorオブジェクトとメモリを共有する場合があります。一方に対する変更は、他方に反映される場合があります。
大胆な強調鉱山。コピーが返される場合と返されない場合があり、これは実装の詳細です。
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)
古いAPIから新しいAPIへのマッピングについては、TF 2.0シンボルマップも参照してください。
eval()
。
必要がある:
コード:
import tensorflow as tf
import matplotlib.pyplot as plt
import PIL
...
image_tensor = <your decoded image tensor>
jpeg_bin_tensor = tf.image.encode_jpeg(image_tensor)
with tf.Session() as sess:
# display encoded back to image data
jpeg_bin = sess.run(jpeg_bin_tensor)
jpeg_str = StringIO.StringIO(jpeg_bin)
jpeg_image = PIL.Image.open(jpeg_str)
plt.imshow(jpeg_image)
これでうまくいきました。あなたはipythonノートブックでそれを試すことができます。次の行を追加することを忘れないでください。
%matplotlib inline
cleverhansライブラリ/チュートリアルで取得された(敵対的な)画像を表すテンソルの特定のケースにおけるテンソル-> ndarray変換に直面して解決しました。
私の質問/回答(ここ)は、他の場合にも役立つ例だと思います。
私はTensorFlowを使い始めたばかりですが、これは経験的な結論です。
tensor.eval()メソッドは、成功するために、入力プレースホルダーの値も必要とする場合があります。Tensorはfeed_dict
、出力値を返すために入力値(に提供される)を必要とする関数のように機能する場合があります。
array_out = tensor.eval(session=sess, feed_dict={x: x_input})
私の場合、プレースホルダー名はxですが、入力プレースホルダーの正しい名前を見つける必要があると思います。
x_input
入力データを含むスカラー値または配列です。
私の場合、提供sess
も必須でした。
私の例では、matplotlib画像の視覚化の部分も取り上げていますが、これはOTです。
簡単な例は、
import tensorflow as tf
import numpy as np
a=tf.random_normal([2,3],0.0,1.0,dtype=tf.float32) #sampling from a std normal
print(type(a))
#<class 'tensorflow.python.framework.ops.Tensor'>
tf.InteractiveSession() # run an interactive session in Tf.
nこのテンソルaをnumpy配列に変換する場合
a_np=a.eval()
print(type(a_np))
#<class 'numpy.ndarray'>
とても簡単!
//
Pythonでコメントするためのものではありません。回答を編集してください。
私はこのコマンドの日を探していました。
これは、セッションやこのような何かの外で私のために働きました。
# you get an array = your tensor.eval(session=tf.compat.v1.Session())
an_array = a_tensor.eval(session=tf.compat.v1.Session())
https://kite.com/python/answers/how-to-convert-a-tensorflow-tensor-to-a-numpy-array-in-python