Тензорный поток: как подать переменную-заполнителя тензором?
У меня есть переменная-заполнителя, которая ожидает пакет входных изображений:
input_placeholder = tf.placeholder(tf.float32, [None] + image_shape, name='input_images')
Теперь у меня есть 2 источника входных данных:
1) тензор и
2) некоторые числовые данные.
Для входных данных numpy я знаю, как передавать данные переменной-заполнителю:
sess = tf.Session()
mLoss, = sess.run([loss], feed_dict = {input_placeholder: myNumpyData})
Как я могу передать тензор этой переменной-заполнителю?
mLoss, = sess.run([loss], feed_dict = {input_placeholder: myInputTensor})
дает мне ошибку:
TypeError: The value of a feed cannot be a tf.Tensor object. Acceptable feed values include Python scalars, strings, lists, or numpy ndarrays.
Я не хочу преобразовывать тензор в массив numpy с помощью .eval()
, так как это замедлит мою программу, есть ли другой способ?
Ответы
Ответ 1
Вы можете использовать feed_dict
для подачи данных в не-заполнители. Итак, сначала подключите свой график потока данных непосредственно к вашему тендерному источнику данных myInputTensor
(т.е. Не используйте местозаполнитель). Затем, когда вы хотите работать с вашими данными numpy, вы можете эффективно маскировать myImportTensor
с помощью myNumpyData
, например:
mLoss, = sess.run([loss], feed_dict={myImportTensor: myNumpyData})
[Я все еще пытаюсь выяснить, как это сделать с несколькими тензорными источниками данных.]
Ответ 2
Это обсуждалось в GitHub в 2016 году, и, пожалуйста, проверьте здесь. Вот ключевой момент concretevitamin:
Следует отметить, что Тензор - это просто символический объект. Значения вашего feed_dict являются фактическими значениями, например. Nump ndarry.
Тензор как символический объект течет на графике, а фактические значения находятся за его пределами, тогда мы можем передавать фактические значения только в график, а символический объект не может существовать вне графика.
Ответ 3
Это работает для меня в последней версии... может быть, у вас более старая версия TF?
a = tf.Variable(1)
sess.run(2*a, feed_dict={a:5}) # prints 10