テンソルフローで次のことを行うにはどうすればよいですか?
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])
テンソルを変更することはできませんが、前述のように、変数を変更することはできます。
目的を達成するために使用できるパターンは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()
を作成し、それらを一緒にtf.concat(0, [a, 0, b])
戻します。
(c)b = tf.zeros_like(a)
を作成し、tf.select()
を使用して、a
から必要な項目と、b
から必要なゼロを選択します。
(b)と(c)は、変数だけでなく通常のテンソルでも機能するため、ここに含めました。