web-dev-qa-db-ja.com

TensorFlowでテンソルをテンキー配列に変換する方法を教えてください。

PythonバインディングでTensorflowを使用するときにテンソルをテンキー配列に変換する方法

110
mathetes

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'>

Session.runまたはeval()から返されるEDIT: Not any tensorはNumPy配列です。たとえば、スパーステンソルはSparseTensorValueとして返されます。

>>> print(type(tf.Session().run(tf.SparseTensor([[0, 0]],[1],[1,2]))))
<class 'tensorflow.python.framework.sparse_tensor.SparseTensorValue'>
94
Lenar Hoyt

テンソルからテンキー配列に変換するには、変換されたテンソルに対して.eval()を実行するだけです。

69

必要がある:

  1. 何らかの形式(jpeg、png)のイメージテンソルをバイナリテンソルにエンコードする
  2. セッション内のバイナリテンソルを評価(実行)する
  3. バイナリをストリームにする
  4. pIL画像へのフィード
  5. (オプション)matplotlibで画像を表示する

コード:

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
4
Gooshan

TensorFlow 2.0

Eager Execution はデフォルトで有効になっているため、Tensorオブジェクトで .numpy() を呼び出すだけです。

import tensorflow as tf

a = tf.constant([[1, 2], [3, 4]])                 
b = tf.add(a, 1)

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 Symbols Map も参照してください。

4
cs95

たぶん、あなたは、この方法を試すことができます:

import tensorflow as tf
W1 = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
array = W1.eval(sess)
print (array)
2
lovychen

cleverhans library/tutorialsで得られた(敵対的な)イメージを表すテンソルの特定の場合におけるtensor-> ndarray変換に直面し、解決しました。

私の質問/答え( here )は他の場合にも役に立つ例かもしれないと思います。

TensorFlowは初めてですが、私の経験による結論です。

成功するためには、tensor.eval()メソッドがinput placeholderの値も必要とするかもしれません。 Tensorは、出力値を返すためにその入力値(feed_dictに提供される)を必要とする関数のように動作します。

array_out = tensor.eval(session=sess, feed_dict={x: x_input})

私の場合、プレースホルダーの名前は x ですが、入力プレースホルダーの正しい名前を見つける必要があると思います。 x_inputは、入力データを含むスカラー値または配列です。

私の場合はsessの提供も必須でした。

私の例はmatplotlib画像可視化部分もカバーしていますが、これはOTです。

1
Fabiano Tarlao

簡単な例は、

    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.

このテンソルaをテンキー配列に変換したい場合はn

    a_np=a.eval()
    print(type(a_np))
    #<class 'numpy.ndarray'>

それと同じくらい簡単!

0
Saurabh Kumar