2016-06-20 12 views
0

Tensorオブジェクトの行列をnumpy行列としてスライスし、部分計算に使用しようとしています。 しかし、Tensorオブジェクトからnumpy配列への割り当ては、次のようには機能しません。Tensorオブジェクトの実際の数値をTensorflowのnumpy配列に代入する

import tensorflow as tf 
import numpy as np 

def assignC(): 
    C_copy = np.zeros((2,2)) 
    C = tf.matmul(tf.transpose(x), x) 
    C_copy[0,0] = C[0,0] 
    #C_copy[0,0] = C[0,0].eval() # error saying "You must feed a value for placeholder tensor 'Placeholder' with dtype float" at line 17 
    print(C_copy[0,0]) 
    return C_copy 

sess = tf.InteractiveSession() 

from tensorflow.examples.tutorials.mnist import input_data 
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) 

x = tf.placeholder(tf.float32, [None, 784]) 

sess.run(tf.initialize_all_variables()) 
for i in range(1): 
    batch_xs, batch_ys = mnist.train.next_batch(100) 
    print(sess.run(tf.identity(assignC()), feed_dict={x: batch_xs})) 

これは、 "ValueError:シーケンスで配列要素を設定する"というエラーで終了しました。行7で。 誰もテンソルオブジェクトの数値を抽出し、それを非テンソルフローオブジェクトに割り当てる方法を教えてもらえますか?

答えて

0

あなたはTensorFlowグラフにpython/numpyコードを導入しないでください。

アレイをスライスする場合は、tf.sliceを使用できます。例えば

、あなたがC[0, 0]を取得したい場合:

C = tf.constant([[1., 2.], [3., 4.]]) 
res = tf.slice(C, [0, 0], [1, 1]) 

あなたが得るエラーがC_copyが山車のnumpyの配列であるという事実から来ている、とあなたはtf.TensorC_copy[0, 0]を設定しよう。

0

TLDR; use .eval(feed_dict={x:batch_xs})

特定の計算を表すオブジェクトで、使用前に評価されなければならない "抽象的なテンソル"を持つ "コンクリートテンソル"(numpy配列などの実際の値を表すオブジェクト)を混在させます。

あなたがC[0,0]を行うと、Cは抽象テンソルである、とC[0,0]要素を取得するために必要SliceSqueeze一連の操作になってます、と私はnumpyのは、それが配列だと思っ推測します。いずれにせよ、numpyは具体的な値を期待しているので、配列要素に設定するとうまくいかないので、最初に評価する必要があります。evalまたはsession.run

関連する問題