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