Tensorflow: как изменить значение в Тензоре

поскольку мне нужно написать некоторые препроцессы для данных перед использованием Tensorflow для обучения моделей, некоторые изменения в это. Однако я понятия не имею, как изменить значения в tensor Как использовать numpy.

лучший способ сделать это заключается в том, что он способен изменить tensor напрямую. Но, кажется, не возможно в текущей версии Tensorflow. Альтернативный способ меняется tensor to ndarray для процесса, а затем использовать tf.convert_to_tensor переодеться обратно.

ключ, как изменить tensor to ndarray.
1) tf.contrib.util.make_ndarray(tensor): https://www.tensorflow.org/versions/r0.8/api_docs/python/contrib.util.html#make_ndarray
Это кажется самым простым способом в соответствии с документом, но я не могу найти эту функцию в текущей версии Tensorflow. Во-вторых, вход этого TensorProto, а не tensor.
2) Использовать a.eval() скопировать a в другой ndarray
Тем не менее, он работает только на используя tf.InteractiveSession() в тетради.

простой случай с кодами показан ниже. Цель этого кода-сделать так, чтобы tfc имеет тот же выход, что и npc после завершения процесса.

подсказка
Вы должны лечить это tfc и npc независимы друг от друга. Это соответствует ситуации, когда сначала полученные данные обучения находятся в С tf.placeholder().


источник код

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)

выход:

tfc:
[[ 1. 2.]
[ 3. 4.]]
npc:
[[ 1. 2.]
[ 3. 4.]]
измененный tfc:
[[ 1. 2.]
[ 3. 4.]]
модифицированный npc:
[[ 1.1 2.2]
[3.1 4.2]]

1 ответов


используйте assign и eval (или sess.запустить) назначение:

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)

выдает:

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]]