tutorial que libreria instalar funciones español entrenar con aplicaciones indexing addition tensorflow

indexing - que - Ajuste de valor único dentro de Tensor-TensorFlow



tensorflow keras tutorial (3)

¿Qué tal tf.scatter_update(ref, indices, updates) o tf.scatter_add(ref, indices, updates) ?

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

Mira this .

Me da vergüenza preguntar esto, pero ¿cómo se ajusta un solo valor dentro de un tensor? ¿Suponga que desea agregar ''1'' a un solo valor dentro de su tensor?

Hacerlo indexando no funciona:

TypeError: ''Tensor'' object does not support item assignment

Un enfoque sería construir un tensor con forma idéntica de 0. Y luego ajustando un 1 en la posición que desee. Luego sumarías los dos tensores juntos. De nuevo, esto se encuentra con el mismo problema que antes.

He leído los documentos de la API varias veces y parece que no puedo entender cómo hacerlo. ¡Gracias por adelantado!


tf.scatter_update no tiene tf.scatter_update ningún operador de descenso de gradiente y generará un error al aprender con al menos tf.train.GradientDescentOptimizer . Debe implementar la manipulación de bits con funciones de bajo nivel.


ACTUALIZACIÓN: TensorFlow 1.0 incluye un operador tf.scatter_nd() , que puede usarse para crear delta continuación sin crear un tf.SparseTensor .

¡Esto es realmente sorprendentemente complicado con las operaciones existentes! Quizás alguien pueda sugerir una mejor manera de concluir lo siguiente, pero aquí hay una forma de hacerlo.

Digamos que tiene un tensor tf.constant() :

c = tf.constant([[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]])

... y desea agregar 1.0 en la ubicación [1, 1]. Una forma de hacerlo es definir un tf.SparseTensor , delta , que representa el cambio:

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)

Luego puede usar el op tf.sparse_tensor_to_dense() para hacer un tensor denso desde delta y agregarlo a 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)