これを聞いて恥ずかしい思いをしますが、テンソル内の単一の値をどのように調整しますか?テンソル内の1つの値のみに「1」を追加するとしますか?
インデックスを作成して実行しても機能しません。
TypeError: 'Tensor' object does not support item assignment
1つのアプローチは、0の同一形状のテンソルを構築することです。そして、必要な位置で1を調整します。次に、2つのテンソルを一緒に追加します。繰り返しますが、これは以前と同じ問題に直面します。
APIドキュメントを何度も読みましたが、これを行う方法がわかりません。前もって感謝します!
UPDATE:TensorFlow 1.0には tf.scatter_nd()
演算子が含まれています。 _tf.SparseTensor
_を作成せずにdelta
を作成します。
これは実際、既存のopsでは驚くほどトリッキーです!おそらく誰かが次のことをまとめるより良い方法を提案できるかもしれませんが、ここでそれを行う1つの方法があります。
tf.constant()
テンソルがあるとしましょう:
_c = tf.constant([[0.0, 0.0, 0.0],
[0.0, 0.0, 0.0],
[0.0, 0.0, 0.0]])
_
...また、ロケーション[1、1]に_1.0
_を追加します。これを行う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
this を参照してください。
tf.scatter_update
には勾配降下演算子が割り当てられておらず、少なくともtf.train.GradientDescentOptimizer
。低レベル関数でビット操作を実装する必要があります。