web-dev-qa-db-ja.com

TensorFlowでの行列要素の操作

テンソルフローで次のことを行うにはどうすればよいですか?

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])
10
Shagas

テンソルを変更することはできませんが、前述のように、変数を変更することはできます。

目的を達成するために使用できるパターンは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)は、変数だけでなく通常のテンソルでも機能するため、ここに含めました。

19
dga