2017-02-20 15 views
2

У меня есть функция get_image(...), которая выполняет предварительную обработку на моих входных изображениях. Я собираю все изображения, которые принадлежат к одной и той же партии в списке, как это:Tensorflow: создать пакет из списка тензоров изображений

batch = [get_image(file_path) for file_path in batch_files] 

Теперь я хочу, чтобы преобразовать этот список в один тензор с первым измерением, являющимся измерение размера партии, так что я мог бы кормить его к входному заполнителю моей сети.

_ = self.sess.run([loss],feed_dict={ input_placeholder: batch }) 

Любая идея, как я мог это сделать?

  batch_concat = tf.placeholder(shape=[None] + self.image_shape, dtype=tf.float32) 
      for i in xrange(0,self.batch_size): 
       if i == 0: 
        tmp_batch = tf.expand_dims(batch[i], 0) 
        batch_concat = tmp_batch 
       else: 
        tmp_batch = tf.expand_dims(batch[i], 0)       
        batch_concat = tf.concat(0, [batch_concat, tmp_batch]) 

Когда я пытаюсь объединить все тензоры, я получаю следующее сообщение об ошибке:

TypeError: The value of a feed cannot be a tf.Tensor object. Acceptable feed values include Python scalars, strings, lists, or numpy ndarrays. 

Так что, возможно, было бы достаточно, чтобы преобразовать тензор обратно в Numpy массив перед подачей его в сеть?

+0

не понятно, что вы хотите сделать здесь. Почему вы не передаете список python, содержащий изображения, как ваш input_batch? tensorflow преобразует его для вас – fabrizioM

+0

Я хотел использовать функции предварительной обработки, предоставляемые tf. В противном случае мне пришлось бы переписать все в python ... – mcExchange

ответ

0

Вы можете использовать tf.pack, чтобы упаковать список тензоров в пакет.

image_list = [get_image(file_path) for file_path in batch_files] 
image_batch = tf.pack(image_list) 

Вы также можете использовать tf.concat конкатенировать список вдоль первого измерения и изменить его форму.