program story

Tensor 내에서 단일 값 조정 — TensorFlow

inputbox 2021. 1. 8. 08:12
반응형

Tensor 내에서 단일 값 조정 — TensorFlow


이 질문이 부끄럽지만 텐서 내에서 단일 값을 어떻게 조정합니까? 텐서 내의 하나의 값에만 '1'을 더하고 싶다고 가정 해 보겠습니다.

인덱싱으로 수행하면 작동하지 않습니다.

TypeError: 'Tensor' object does not support item assignment

한 가지 접근 방식은 동일한 모양의 0의 텐서를 만드는 것입니다. 그런 다음 원하는 위치에서 1을 조정합니다. 그런 다음 두 개의 텐서를 더합니다. 다시 이것은 이전과 동일한 문제에 직면합니다.

API 문서를 여러 번 읽었는데이 작업을 수행하는 방법을 알아낼 수없는 것 같습니다. 미리 감사드립니다!


업데이트 : TensorFlow 1.0에는 .NET Framework 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()op를 사용하여 밀도가 높은 텐서를 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)

방법에 대해 tf.scatter_update(ref, indices, updates)tf.scatter_add(ref, indices, updates)?

ref[indices[...], :] = updates
ref[indices[...], :] += updates

참조 .


tf.scatter_update에는 경사 하강 법 연산자가 할당되어 있지 않으며 최소한으로 학습하는 동안 오류가 발생합니다 tf.train.GradientDescentOptimizer. 저수준 함수로 비트 조작을 구현해야합니다.

참조 URL : https://stackoverflow.com/questions/34685947/adjust-single-value-within-tensor-tensorflow

반응형