2016-03-03 7 views
8

テンソルフローではどうすればよいですか?それだけで 変数に定数上で動作していないので、テンソルフローの行列要素を操作する

mat = [4,2,6,2,3] # 
mat[2] = 0 # simple zero the 3rd element 

は、私が[]ブラケットを使用することはできません。スライス関数は、テンソルを返し、テンソルに代入することができないため、使用できません。あなたが述べたように、変数を変更することができますが、 -

import tensorflow as tf 
sess = tf.Session() 
var1 = tf.Variable(initial_value=[2, 5, -4, 0]) 
assignZerosOP = (var1[2] = 0) # < ------ This is what I want to do 

sess.run(tf.initialize_all_variables()) 

print sess.run(var1) 
sess.run(assignZerosOP) 
print sess.run(var1) 

[2, 5, -4, 0] 
[2, 5, 0, 0]) 

答えて

11

を出力しますあなたはテンソルを変更することはできません。

あなたが望むものを達成するために使用できる3つのパターンがあります。

(a)は、直接変更したい変数の一部に突くtf.scatter_updateを使用しては。

import tensorflow as tf 

a = tf.Variable(initial_value=[2, 5, -4, 0]) 
b = tf.scatter_update(a, [1], [9]) 
init = tf.initialize_all_variables() 

with tf.Session() as s: 
    s.run(init) 
    print s.run(a) 
    print s.run(b) 
    print s.run(a) 

[2 5 -4 0]

[2~9 -4 0]

[2~9 -4 0]

(B)は、2つのtf.slice()を作成あなたが変更したいアイテムを除いて、テンソルの0を返します。そしてtf.concat(0, [a, 0, b])を一緒に戻します。

(c)はb = tf.zeros_like(a)を作成し、あなたが望むaからどの項目を選択するtf.select()を使用して、どのあなたが欲しいbからゼロ。

(b)と(c)は、変数だけでなく、通常のテンソルで動作するため、これを含めました。

+0

本当に助けになりましたが、私はそれに取り組むことができましたが、幾分コンペリタムになります。実際にテンソルを変更する必要があればどうなりますか?それをする方法はありませんか? ネットワークビジュアライゼーションを実装したいと思います。イメージをアクティベーションレイヤーまで伝播し、ランダムなもの以外のすべてのアクティベーションをゼロにしてから、それを伝播する必要があります。 – Shagas

+0

テンソルは不変です。一般に、状態を保存して変更したい場合は、変数に保存して変更することができます。しかし、そうでなければ、元のテンソルを作成して使用するだけです。あなたが記述している場合、それはおそらくアプローチです。 – dga

+0

答えをありがとう。あなたが提案した元のテンソルを使って問題を解決しました。 – Shagas

関連する問題