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