6

Я читал о сверточных нейронных сетях от here. Затем я начал играть с torch7. У меня путаница со сверточным слоем CNN.Устранение неполадок Сверторная нейронная сеть

Из учебника,

The neurons in a layer will only be connected to a small region of the layer before it, instead of all of the neurons in a fully-connected manner.

For example, suppose that the input volume has size [32x32x3], (e.g. an RGB CIFAR-10 image). If the receptive field is of size 5x5, then each neuron in the Conv Layer will have weights to a [5x5x3] region in the input volume, for a total of 5*5*3 = 75 weights.

, если входной слой [32x32x3], CONV layer will compute the output of neurons that are connected to local regions in the input, each computing a dot product between their weights and the region they are connected to in the input volume. This may result in volume such as [32x32x12].

Я начал играть с тем, что слой CONV мог бы сделать с изображением. Я сделал это в torch7. Вот моя реализация,

require 'image' 
require 'nn' 

i = image.lena() 

model = nn.Sequential() 
model:add(nn.SpatialConvolutionMM(3, 10, 5, 5)) --depth = 3, #output layer = 10, filter = 5x5 

res = model:forward(i) 
itorch.image(res) 
print(#i) 
print(#res) 

выход cnn transformation

3 
512 
512 
[torch.LongStorage of size 3] 

    10 
508 
508 
[torch.LongStorage of size 3] 

Теперь позволяет увидеть структуру CNN

CNN

Итак, мои вопросы,

Вопрос 1

Является ли свертка выполненным так: скажем, возьмем изображение 32x32x3. И есть фильтр 5x5. Затем фильтр 5x5 пройдет через все изображение 32x32 и произведет свернутые изображения? Хорошо, так что скользящий фильтр 5x5 по всему изображению, мы получаем одно изображение, если есть 10 уровней вывода, мы получаем 10 изображений (как вы видите на выходе). Как мы их получаем? (См изображения для уточнения, если это необходимо)

enter image description here

Вопрос 2

Что такое числа нейронов в слое ко? Это количество выходных уровней? В коде, который я написал выше, model:add(nn.SpatialConvolutionMM(3, 10, 5, 5)). Это 10? (количество выходных уровней?)

Если это так, то номер точки 2 не имеет никакого смысла. В соответствии с этим If the receptive field is of size 5x5, then each neuron in the Conv Layer will have weights to a [5x5x3] region in the input volume, for a total of 5*5*3 = 75 weights. Так какой будет вес здесь? В этом я очень смущен. В модели, определенной в факеле, нет веса. Итак, как вес играет здесь роль?

Может кто-нибудь объяснить, что происходит?

ответ

8

Является ли свертка выполненным так: скажем, возьмем изображение 32x32x3. И есть фильтр 5x5. Затем фильтр 5x5 пройдет через все изображение 32x32 и произведет свернутые изображения?

Для входного изображения 32x32x3 фильтр 5x5 будет перебирать каждый пиксель и каждый пиксель смотреть в окрестности 5x5. Этот район содержит 5 * 5 * 3 = 75 значений.Ниже приведен пример изображения для фильтра 3x3 по одному входному каналу, то есть с окрестностью значений 3 * 3 * 1 (source).

convolution

Для каждого отдельного соседа фильтр будет иметь один параметр (так называемый вес), так что 75 параметров. Затем, чтобы вычислить одно выходное значение (значение в пикселе x, y), оно считывает эти значения соседних значений, умножает каждый на соответствующий параметр/вес и добавляет их вверх в конец (см. discrete convolution). Оптимальные веса должны быть изучены во время обучения.

Таким образом, один фильтр будет перебирать изображение и генерировать новый выход, пиксель за пикселем. Если у вас несколько фильтров (т. Е. Второй параметр в SpatialConvolutionMM равен> 1), вы получаете несколько выходов («плоскости» в факеле).

Хорошо, так что скользящий фильтр 5x5 по всему изображению, мы получим одно изображение, если есть 10 выходных уровней, мы получаем 10 изображений (как вы видите на выходе). Как мы их получаем? (см. изображение для пояснения при необходимости)

Каждая выходная плоскость генерируется собственным фильтром. Каждый фильтр имеет свои собственные параметры (5 * 5 * 3 параметров в вашем примере). Процесс для нескольких фильтров точно такой же, как и для одного.

Какое количество нейронов в слое conv? Это количество выходных уровней? В коде, который я написал выше, model: add (nn.SpatialConvolutionMM (3, 10, 5, 5)). Это 10? (количество выходных слоев?)

Вы должны назвать их весами или параметрами, «нейроны» на самом деле не подходят для сверточных слоев. Количество параметров, как описано, 5 * 5 * 3 = 75 на фильтр в вашем примере. Поскольку у вас есть 10 фильтров («выходные плоскости»), у вас есть всего 750 параметров. Если вы добавите второй уровень в свою сеть с помощью model:add(nn.SpatialConvolutionMM(10, 10, 5, 5)), у вас будут дополнительные параметры 5 * 5 * 10 = 250 на каждый фильтр и 250 * 10 = 2500 баллов. Обратите внимание, как это число может быстро расти (512 фильтров/выходов в одном слое, работающем на 256 входных плоскостях, ничего необычного).

Для дальнейшего чтения вы должны посмотреть http://neuralnetworksanddeeplearning.com/chap6.html. Перейдите к главе «Знакомство с сверточными сетями». В разделе «Местные восприимчивые поля» есть визуализации, которые, вероятно, помогут вам понять, что делает фильтр (один был показан выше).

1

Отказ от ответственности: мною информация приводится ниже, в основном, извлекается из следующих работ: обработки информации в Cats Визуальная Cortex Gradient Based Learning Применительно к Document Recognition Neocortigan рецептивных полей в зрительной коре кошачьего

Является ли свертка выполнена так: скажем, возьмем изображение 32x32x3. И есть фильтр 5x5. Затем фильтр 5x5 пройдет через все изображение 32x32 и произведет свернутые изображения?

Да, фильтр 5x5 пройдет через все изображение, создав изображение 28x28 RGB. Каждый блок в так называемой «карте функций» получает входы 5x5x3, подключенные к области 5x5 на входном изображении (эта 5x5-окрестность называется «локальным восприимчивым полем» устройства). Воспринимающие поля соседних (смежных) единиц в карте объектов сосредоточены на соседних (смежных) единицах в предыдущем слое.

Хорошо, так что скользящий фильтр 5x5 по всему изображению, мы получим одно изображение, если есть 10 выходных уровней, мы получаем 10 изображений (как вы видите на выходе). Как мы их получаем? (см. изображение для пояснения при необходимости)

Обратите внимание, что единицы на слое с характеристиками имеют один и тот же набор мастей и выполняют ту же операцию на разных частях изображения (то есть, если вы смещаете исходное изображение, вывод на карте функций также сдвинется на ту же величину). То есть для каждой карты функций вы ограничиваете набор весов одинаковыми для каждой единицы; у вас есть только 5x5x3 неизвестных весов.

Из-за этого ограничения, и поскольку мы хотим извлечь как можно больше информации из изображения, мы добавляем больше слоев, карты функций: наличие нескольких карт функций помогает нам извлекать несколько функций на каждом пикселе.

К сожалению, я не знаком с Torch7.

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