Як у 12-му CNN Крижевського отримує 253,440 нейронів у першому шарі?


24

У Олексія Крижевського та ін. Класифікація Imagenet із глибокими звивистими нейронними мережами вони перераховують кількість нейронів у кожному шарі (див. Схему нижче).

Вхід в мережу є 150 528-мірним, а кількість нейронів у решті шарів мережі визначається 253,440–186,624–64,896–64,896–43,264– 4096–4096–1000.

CNN

3D-перегляд

Кількість нейронів для всіх шарів після першого зрозуміла. Один простий спосіб обчислити нейрони - просто помножити три виміри цього шару ( planes X width X height):

  • Шар 2: 27x27x128 * 2 = 186,624
  • 3 рівень: 13x13x192 * 2 = 64,896
  • тощо.

Однак, дивлячись на перший шар:

  • Шар 1: 55x55x48 * 2 = 290400

Зауважте, що це не так, 253,440 як зазначено в папері!

Обчислити вихідний розмір

Інший спосіб обчислити вихідний тензор згортки:

Якщо вхідне зображення є 3D тензором nInputPlane x height x width, розмір вихідного зображення буде nOutputPlane x owidth x oheightде

owidth = (width - kW) / dW + 1

oheight = (height - kH) / dH + 1 .

Документації про просторову конверсію факела )

Вхідне зображення:

  • nInputPlane = 3
  • height = 224
  • width = 224

А шар згортки:

  • nOutputPlane = 96
  • kW = 11
  • kH = 11
  • dW = 4
  • dW = 4

(наприклад, розмір ядра 11, крок 4)

Підключивши ці числа, ми отримаємо:

owidth = (224 - 11) / 4 + 1 = 54 oheight = (224 - 11) / 4 + 1 = 54

Таким чином, ми маємо один із тих 55x55розмірів, які нам потрібні, щоб відповідати папері. Вони можуть бути прокладками (але cuda-convnet2модель явно встановлює обкладку на 0)

Якщо взяти 54великі розміри, ми отримаємо 96x54x54 = 279,936нейрони - все одно занадто багато.

Отже, моє запитання таке:

Як вони отримують 253,440 нейронів для першого згорткового шару? Що я пропускаю?


Ви коли-небудь вирішували це? Просто щоб бути педантичним у своїх розрахунках: ширина та висота насправді були б 54,25. Я спробував розібратися в цьому, і в якості першого кроку розділив передбачувані 253440 нейронів серед 96 фільтрів, що дає 2640 нейронів на фільтр. Це не квадратне число. Тож у нас обох є непорозуміння, або автори можуть помилитися ... Ви з ними зв’язалися?
anderas

те саме зі мною, це мене дуже бентежить. btw є правда вхід 224x224x3? я думаю, що це повинно бути 227x227x3. давайте подивимося, чи є у нас 227x227, 5 комірок зліва та 5 комірок з останнього праворуч не можуть бути центром згортки ядра з розміром 11x11. Отже, першим центром ядра є клітинка (6,6), а останнє з центрального ядра в першому ряду - комірка (6x222). З допомогою stride-4 ми отримаємо центр ядра в рядку шостому: клітинка на стовпчик: 6,10,14, ..., 222, а проста формула для центру ядра-k знаходиться на стовпчику = 6+ (k -1) * 4, так що стовпець 222 є k-м центром = (222-6) / 4 +1 = 55.

4
Зауважте, що 48 * 48 * 55 * 2 = 253440, тому, можливо, вони мали помилку під час підрахунку кількості нейронів у першому шарі (помножено на 48 замість 55).
цики


@Firebug Це цікаве використання тегу [посилання]. Я думав, що ми використовуємо це лише для питань, які задають посилання Але, можливо, я помилявся Ви використовуєте це по-різному?
амеба каже: Відновіть Моніку

Відповіді:


8

З примітки про стафідери в НН:

Приклад у реальному світі Крижевський та ін. архітектура, яка перемогла у виклику ImageNet у 2012 році, прийняла зображення розміром [227x227x3]. На першому згортковому шарі він використовував нейрони з розміром сприйнятливого поля F = 11, кроком S = 4 і відсутністю нульових прокладок P = 0. Оскільки (227 - 11) / 4 + 1 = 55, і оскільки шар Conv мав глибину K = 96, об'єм вихідного шару Conv мав розмір [55x55x96]. Кожен із 55 * 55 * 96 нейронів у цьому обсязі був з'єднаний з областю розміру [11x11x3] у вхідному обсязі. Більше того, всі 96 нейронів у кожному стовпчику глибини з'єднані з однаковою [11x11x3] областю введення, але, звичайно, з різною вагою. Як утіха, якщо ви читаєте фактичний документ, він стверджує, що вхідні зображення були 224x224, що, безумовно, неправильно, оскільки (224 - 11) / 4 + 1 цілком явно не ціле число. Це заплутало багатьох людей в історії ConvNets і мало що відомо про те, що сталося. Моя найкраща здогадка полягає в тому, що Алекс використав нульову обкладку з 3-х додаткових пікселів, які він не згадує у статті.

посилання: http://cs231n.github.io/convolutional-networks/

Ці замітки супроводжують Стенфордський CS клас CS231n: Конволюційні нейронні мережі для візуального розпізнавання. З питаннями / занепокоєннями / повідомленнями про помилки щодо контакту з Джастіном Джонсоном щодо виконання завдань або зв’яжіться з Андрієм Карпатію щодо конспектів курсу


Чи можна надати кредит, назвавши автора цих записок?
Срібна рибка

Автори чітко посилаються на нотатки, див. Cs231n.github.io
Бекон

2
Хоча на них чітко посилаються, якщо ви переходите за посиланням, тут також з’являється цитата, тому тут також має бути надано кредит. Це частково люб’язно, але також оскільки посилання може перестати працювати (наприклад, якщо матеріал видалено / оплачено / перенесено на нову адресу). На жаль, у нас є серйозна проблема із "гниттям посилань" на цьому веб-сайті - хоча ми маємо намір слугувати довготривалим сховищем якісних відповідей на статистичні запитання, багато старих відповідей застаріли за посиланнями, які більше не працюють . Тому, як правило, безпечніше намагатися робити відповіді максимально автономними.
Срібна рибка

0

Цей документ справді заплутаний. По-перше, розмір вводу зображень невірний 224x224 не дає 55. Ці нейрони просто подібно згруповані пікселі в одне, тож вихід є двовимірним зображенням випадкових значень (нейронних значень). Отже, в основному кількість нейронів = ширинаxheightxdepth, немає ніяких секретів, щоб це з'ясувати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.