Tensorflow: Cómo modificar el valor en tensor.

Ya que necesito escribir algunos preprocesos para los datos antes de usar Tensorflow para entrenar modelos, se necesitan algunas modificaciones en el tensor . Sin embargo, no tengo idea de cómo modificar los valores en tensor como la forma en que se usa numpy .

La mejor manera de hacerlo es que sea capaz de modificar el tensor directamente. Sin embargo, parece que no es posible en la versión actual de Tensorflow. Una forma alternativa es cambiar tensor a ndarray para el proceso, y luego usar tf.convert_to_tensor para volver a cambiar.

La clave es cómo cambiar tensor a ndarray .
1) tf.contrib.util.make_ndarray(tensor) : https://www.tensorflow.org/versions/r0.8/api_docs/python/contrib.util.html#make_ndarray
Parece la forma más sencilla según el documento, pero no puedo encontrar esta función en la versión actual de Tensorflow. En segundo lugar, su entrada es TensorProto lugar de tensor .
2) Use a.eval() para copiar a a otra ndarray
Sin embargo, funciona solo al usar tf.InteractiveSession() en el cuaderno.

Un caso simple con códigos se muestra a continuación. El propósito de este código es hacer que tfc tenga la misma salida que npc después del proceso.

INSINUACIÓN
Debe tratar que tfc y npc son independientes entre sí. Esto resuelve la situación de que al principio los datos de entrenamiento recuperados están en formato tensor con tf.placeholder() .


Código fuente

 import numpy as np import tensorflow as tf tf.InteractiveSession() tfc = tf.constant([[1.,2.],[3.,4.]]) npc = np.array([[1.,2.],[3.,4.]]) row = np.array([[.1,.2]]) print('tfc:\n', tfc.eval()) print('npc:\n', npc) for i in range(2): for j in range(2): npc[i,j] += row[0,j] print('modified tfc:\n', tfc.eval()) print('modified npc:\n', npc) 

Salida:

tfc:
[[1. 2.]
[3. 4.]]
npc:
[[1. 2.]
[3. 4.]]
tfc modificado:
[[1. 2.]
[3. 4.]]
npc modificado:
[[1.1 2.2]
[3.1 4.2]]

Utilice asignar y eval (o sess.run) la asignación:

 import numpy as np import tensorflow as tf npc = np.array([[1.,2.],[3.,4.]]) tfc = tf.Variable(npc) # Use variable row = np.array([[.1,.2]]) with tf.Session() as sess: tf.initialize_all_variables().run() # need to initialize all variables print('tfc:\n', tfc.eval()) print('npc:\n', npc) for i in range(2): for j in range(2): npc[i,j] += row[0,j] tfc.assign(npc).eval() # assign_sub/assign_add is also available. print('modified tfc:\n', tfc.eval()) print('modified npc:\n', npc) 

Produce:

 tfc: [[ 1. 2.] [ 3. 4.]] npc: [[ 1. 2.] [ 3. 4.]] modified tfc: [[ 1.1 2.2] [ 3.1 4.2]] modified npc: [[ 1.1 2.2] [ 3.1 4.2]]