Tensorflow: как изменить значение в тензоре
Поскольку мне нужно написать некоторые предварительные процессы для данных перед использованием Tensorflow для обучения моделей, некоторые модификацииtensor
нужно. Тем не менее, я понятия не имею, как изменить значения вtensor
как способ использованияnumpy
.
Лучший способ сделать это состоит в том, что он может изменитьtensor
непосредственно. Тем не менее, это кажется невозможным в текущей версии Tensorflow. Альтернативный путь меняетсяtensor
вndarray
для процесса, а затем использоватьtf.convert_to_tensor
чтобы вернуться
Ключ, как изменитьtensor
в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
независимы друг от друга. Это соответствует ситуации, когда сначала полученные данныеtensor
отформатировать с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)
Выход:
КТФ:
[[1. 2.]
[3. 4.]]
НПЦ:
[[1. 2.]
[3. 4.]]
модифицированный TFC:
[[1. 2.]
[3. 4.]]
модифицированный NPC:
[[1.1 2.2]
[3.1 4.2]]