Выходной размер theano.tensor.nnet.conv.conv2d

Функция, которая в настоящее время широко используется в учебниках и других местах, имеет вид:

conv_out = conv2d(
        input= x, # some 4d tensor 
        filters= w, # some shared variable
        filter_shape= [ nkerns, stack_size, filter_height, filter_width ],
        image_shape= [ batch_size, stack_size, height, width ]
    )
  1. Если для первого слоя CNN у меня есть filter_shape как [ 20, 1 , 7, 7 ], что означает количество ядер, равное 20, каждое 7 X 7, что означает «1»? Мой image_shape это [100, 1, 84, 84 ].

  2. Эта свертка теперь выводит тензор формы [ 100, 20, 26, 26], которую я понимаю. Мой следующий слой теперь принимает параметры filter_shape = [50, 20, 5 ,5 ] , image_shape = [ 100, 20 ,26, 26 ] и выдает форму [ 100 ,50 ,11 ,11 ]. Кажется, я понимаю эту операцию, за исключением того, что если я хочу использовать слой фильтров «50», каждый из которых работает с предыдущими 20 созданными картами объектов, не должен ли я создавать всего 1000 карт объектов вместо создания всего 50 карт объектов? Чтобы повторить мой вопрос, у меня есть стек из 20 карт функций, каждая из которых запускает 50 ядер свертки, не должна ли моя выходная форма быть [100, 1000, 11, 11] вместо [ 100, 50 , 11, 11] ?


person Ragav Venkatesan    schedule 04.06.2015    source источник
comment
На самом деле, можете ли вы объяснить, как вы получаете выходной тензор [100, 20, 26, 26]? Это именно то, с чем я борюсь. Я думал, что свертка - это фильтр формы 7x7, который проходит по входному изображению, я думаю, что выходной тензор тогда равен 100 x 1 x 84-7 x 84-7 ... Ваши указатели очень ценятся!   -  person Bastiaan    schedule 17.05.2016


Ответы (1)


Чтобы ответить на ваши вопросы:

  1. 1 обозначает количество входных каналов. Поскольку вы, кажется, используете изображения в градациях серого, это одно. Для цветных изображений это может быть 3. Для других сверточных слоев, как и во втором вопросе, оно должно быть равно количеству выходных данных, сгенерированных предыдущим слоем.

  2. Использование фильтра размера [50, 20, 5, 5] для входного сигнала [100, 20, 26, 26] на самом деле также является хорошим примером для вашего первого вопроса. У вас здесь 50 фильтров формы [20, 5, 5]. Каждое изображение имеет форму [20, 26, 26]. Свертка каждый раз использует все 20 каналов: фильтр 0 применяется к каналу изображения 0, фильтр 1 применяется к изображению 1, и весь результат суммируется. Имеет ли это смысл?

person eickenberg    schedule 04.06.2015
comment
Извините, если это кажется действительно простым вопросом, но почему весь результат суммируется? Кажется, это статус-кво на каждом форуме/бумаге, который я читал, и причина этого не ясна. Как и в случае с OP, у меня сложилось впечатление, что при создании количества n карт объектов следующий слой, в свою очередь, будет выполнять свертку для каждой из них. Любые предложения о чем-то, что я мог бы прочитать, чтобы помочь мне понять теорию, стоящую за этим? - person biohazard; 30.03.2017
comment
Я предполагаю, что это стандартная практика, которая доказала свою эффективность, например, для распознавания объектов с точки зрения того, какой тип функции позволяет вам учиться. Вы также можете не делать этого, если хотите. Например. преобразование рассеяния этого не делает. Также могут быть одна или две статьи сейчас или в будущем, показывающие, что вам не обязательно это нужно, чтобы учиться. - person eickenberg; 30.03.2017
comment
Спасибо за ваш отзыв :) - person biohazard; 28.06.2017