2016-05-06 9 views
6

Tensorflowを使用してモデルをトレーニングする前に、データの前処理を行う必要があるため、tensorの変更が必要です。しかし、私はnumpyを使用して方法のようtensorの値を変更する方法については考えています。Tensorflow:テンソルの値を変更する方法

そうすることの最善の方法は、直接tensorを変更することが可能であることです。しかし、Tensorflowの現在のバージョンでは不可能と思われます。別の方法は、プロセスのためにndarraytensorを変え、再び変更するtf.convert_to_tensorを使用しています。

キーはndarraytensorを変更する方法です。
1)tf.contrib.util.make_ndarray(tensor)https://www.tensorflow.org/versions/r0.8/api_docs/python/contrib.util.html#make_ndarray
これは、文書ごととして最も簡単な方法だが、まだ私はTensorflowの現在のバージョンではこの機能を見つけることができません。第二に、それの入力はtensorではなくTensorProtoです。
2)aを別のものにコピーするndarray
ただし、ノートブックでtf.InteractiveSession()を使用する場合にのみ使用できます。

コードを有する単純な場合について示しています。このコードの目的は、tfcが処理後にnpcと同じ出力を持つようにすることです。

ヒント
あなたがtfcnpcが互いに独立していることを扱う必要があります。これは、最初に取得したトレーニングデータはtf.placeholder()tensorフォーマットである状況を満たしています。


ソースコード

import numpy as np 
import tensorflow as tf 
tf.InteractiveSession() 

tfc = tf.constant([[1.,2.],[3.,4.]]) 
npc = np.array([[1.,2.],[3.,4.]]) 
row = np.array([[.1,.2]]) 
print('tfc:\n', tfc.eval()) 
print('npc:\n', npc) 
for i in range(2): 
    for j in range(2): 
     npc[i,j] += row[0,j] 

print('modified tfc:\n', tfc.eval()) 
print('modified npc:\n', npc) 

出力:

TFC:
[1 2]
[3 4]
npc:
[1 2]
[3 4]
修飾TFC:
[1 2]
[3 4]
修飾NPC:
[[ 1.1 2.2]
[3.1 4.2]

答えて

4

使用割り当て割り当てと評価(又はsess.run):

import numpy as np 
import tensorflow as tf 

npc = np.array([[1.,2.],[3.,4.]]) 
tfc = tf.Variable(npc) # Use variable 

row = np.array([[.1,.2]]) 

with tf.Session() as sess: 
    tf.initialize_all_variables().run() # need to initialize all variables 

    print('tfc:\n', tfc.eval()) 
    print('npc:\n', npc) 
    for i in range(2): 
     for j in range(2): 
      npc[i,j] += row[0,j] 
    tfc.assign(npc).eval() # assign_sub/assign_add is also available. 
    print('modified tfc:\n', tfc.eval()) 
    print('modified npc:\n', npc) 

それは出力:

tfc: 
[[ 1. 2.] 
[ 3. 4.]] 
npc: 
[[ 1. 2.] 
[ 3. 4.]] 
modified tfc: 
[[ 1.1 2.2] 
[ 3.1 4.2]] 
modified npc: 
[[ 1.1 2.2] 
[ 3.1 4.2]] 
+0

ありがとうございます!私はあなたの思考は、最初に 'npc'で' npc'と同じ値を共有し、 'npc'で最初に処理し、同じ出力に対して' tfc'で 'assign 'することができると考えていると思います。しかし、そうではありません。 あなたが持っている唯一のデータは 'tfc'です。あなたは' npc'を扱う必要があることを最初には示唆していません。ですから、キーは 'tfc'のデータをどのように処理するのかでなければなりません。 – user3030046

+0

@ user3030046操作によって異なります。単純なadd/subの場合は、assign_sub/assign_addを使用します。他のものには、他の多くの方法があります。 tf.Tensorの要素を更新しますか?ユースケースを教えていただければ、私ができることを見ていきます。 –

+0

私の場合、私はCBOW(最後のセルは[ここ](https://github.com/tensorflow/tensorflow/blob/e39d8feebb9666a331345cd8d960f5ade4652bba/tensorflow/examples/udacity/5_word2vec.ipynb)に実装しようとしています。具体的には、10行3列の行列に対して行方向の合計を使用し、10行1列のベクトルを出力するようなものです。この畳み込み演算は、10同じサイズの出力行列を生成するでしょう。 – user3030046

関連する問題