2016-02-08 4 views
3

Я хотел бы сделать передачу обучения из данного inceptionV3 в примере tensorflow. Следуя классификатору пример изображения и имена операторов и тензоров, приведенные здесь https://github.com/AKSHAYUBHAT/VisualSearchServer/blob/master/notebooks/notebook_network.ipynb Я могу создать свой график. Но когда я поставил партию изображений размера (100, 299, 299, 3) в предварительно вычисленном вводном графе, я получаю следующее сообщение об ошибке формы на pool_3 слое:InceptionV3 и передача обучения с помощью тензорного потока

ValueError: Cannot reshape a tensor with 204800 elements to shape [1, 2048] (2048 elements) 

Кажется, что это inceptionV3 не принимает партию изображений в качестве входных данных. Я ошибаюсь ?

ответ

2

Вы не ошибаетесь. Это похоже на очень разумный запрос функции, поэтому я открыл a ticket for it on github. Следуйте за обновлениями.

4

На самом деле это работает для передачи обучения, если вы извлекаете правильную вещь. Нет проблем с подачей партии изображений в форме [N, 299, 299, 3] как ResizeBilinear:0, а затем с использованием тензора pool_3:0. Это перестройка после этого разрывается, но вы можете переделать себя (в любом случае у вас будут свои собственные слои). Если вы хотите использовать оригинальный классификатор с партией, вы можете добавить свою собственную перестройку поверх pool_3:0, а затем добавить слой softmax, повторно используя тензоры веса/смещения оригинального softmax.

TLDR: С double_img быть стопка из двух изображений с формой (2, 299, 299, 3) это работает:

pooled_2 = sess.graph.get_tensor_by_name("pool_3:0").eval(session=sess, feed_dict={'ResizeBilinear:0':double_img}) 
pooled_2.shape 
# => (2, 1, 1, 2048) 
0

Что-то вроде этого следует сделать это:

with g.as_default(): 
    inputs = tf.placeholder(tf.float32, shape=[batch_size, 299, 299, 3], 
           name='input') 

     with slim.arg_scope(inception.inception_v3_arg_scope()): 

      logits, end_points = inception.inception_v3(inputs, 
      num_classes=FLAGS.num_classes, is_training=False) 
      variables_to_restore = lim.get_variables_to_restore(exclude=exclude) 
     sess = tf.Session() 

     saver = tf_saver.Saver(variables_to_restore) 

Тогда вы должны иметь возможность вызвать операцию:

 sess.run("pool_3:0",feed_dict={'ResizeBilinear:0':images}) 
Смежные вопросы