1

Я пытаюсь выполнить свертку с переменными размерами ввода. Для достижения этой цели я использую пакетный размер 1. Тем не менее, один из узлов является максимальное объединение узел, который нуждается в форму ввода в виде списка ksize:TensorFlow feed целое число

pooled = tf.nn.max_pool(
       h, 
       ksize=[1, self.input_size - filter_size + 1, 1, 1], 
       strides=[1, 1, 1, 1], 
       padding='VALID', 
       name="pool") 

Теперь, очевидно, может быть input_size выводится из входа (который является заполнителем):

self.input_x = tf.placeholder(tf.int32, [None, None], name="input_x") 

Но я не могу использовать self.input_x.get_shape()[0], потому что форма является динамическим. Поэтому я намереваюсь передать размер ввода как feed_dict на каждом шаге. Однако я не могу понять, как передать целое число в feed_dict. Каждый заполнителем является тензором, так что если я делаю:

self.input_size = tf.placeholder(tf.int32, shape=(), name="input_size") 

я должен был бы сделать self.input_size.eval(), чтобы получить значение INT, который дает мне ошибку, что мне нужно кормить input_size. Я предполагаю, что это происходит потому, что eval запускает вычисления до того, как происходит этап обучения, и в этот момент нет значения для input_size.

Есть ли способ, которым я могу динамически получить оп, который вычисляет форму ввода или способ передать целое число на этап обучения?

ответ

0

Я не уверен, что это лучший способ, но вы можете получить динамически форму self.input_x в списке с:

input_shape = tf.unpack(tf.shape(self.input_x)) 

tf.shape(self.input_x) дать вам тензорный, представляющий форму self.input_x и f.unpack преобразуйте его в список Тензор.

Теперь вы можете создать свой максимальный узел пула с:

pooled = tf.nn.max_pool(
       h, 
       ksize=tf.pack([1, input_size[1] - filter_size + 1, 1, 1]), 
       strides=[1, 1, 1, 1], 
       padding='VALID', 
       name="pool") 

(если требуется 2-ое измерение input_x)

+0

Он по-прежнему возвращает список тензоров. Мне нужно фактическое значение (целое) второго измерения и во время выполнения. Вот почему я думаю о том, чтобы «кормить» это как параметр, однако, похоже, я могу только кормить тензоры? –

+0

Можете ли вы комбинировать целое число с "input_size = tf.placeholder (tf.int32)"? Он работает для меня, но я на TF r0.8, и я не пробовал с последней версией. Для проблемы списка тензоров я изменил свой ответ. Я не понимаю, почему, но tf.pack массив ksize должен работать ... – Corentin

+0

Это проблема в TF. Независимо от того, что вы делаете - ksize будет оцениваться во время строительства, чтобы это было невозможно. –

Смежные вопросы