ОБНОВЛЕНИЕ. TensorFlow 1.0 включает оператор tf.scatter_nd()
, который можно использовать для создания delta
ниже без создания tf.SparseTensor
.
Это на самом деле удивительно сложно с существующими операциями! Возможно, кто-нибудь может предложить более приятный способ завершить следующее, но вот один из способов сделать это.
Допустим, у вас есть тензор tf.constant()
:
c = tf.constant([[0.0, 0.0, 0.0],
[0.0, 0.0, 0.0],
[0.0, 0.0, 0.0]])
... и вы хотите добавить 1.0
в ячейку [1, 1]. Один из способов сделать это - определить tf.SparseTensor
, delta
, представляющий изменение:
indices = [[1, 1]] # A list of coordinates to update.
values = [1.0] # A list of values corresponding to the respective
# coordinate in indices.
shape = [3, 3] # The shape of the corresponding dense tensor, same as `c`.
delta = tf.SparseTensor(indices, values, shape)
Затем вы можете использовать параметр tf.sparse_tensor_to_dense()
, чтобы сделать плотный тензор из delta
и добавьте его в c
:
result = c + tf.sparse_tensor_to_dense(delta)
sess = tf.Session()
sess.run(result)
# ==> array([[ 0., 0., 0.],
# [ 0., 1., 0.],
# [ 0., 0., 0.]], dtype=float32)
person
mrry
schedule
08.01.2016