DenseNet для схуднення # 3

Коментарі

Копіювати посилання Цитувати відповідь

liuzhuang13slimming

haithanhp прокоментував 23 грудня 2017 р

Дякую за чудову роботу. Я бачив, що ви використали коефіцієнти масштабування для нормалізації пакетного режиму для обрізання вхідних та вихідних ваг на шарах conv. Однак у DenseNet після базового блоку (1x1 + 3x3) попередні функції об'єднані з поточним, а розмір коефіцієнтів масштабування не відповідає до попереднього звивистого шару для обрізки. Отже, як можна обрізати ваги в цьому випадку?

До речі, коли тренувальний розрідженість DenseNet закінчується лямбда 1е-5, ​​я помічаю, що багато факторів масштабування недостатньо малі для обрізки. Чи впливає це на продуктивність стиснутої мережі?

Текст успішно оновлено, але виявлені такі помилки:

liuzhuang13 прокоментував 28 грудня 2017 року

Дякуємо за інтерес. Ми обрізаємо канали відповідно до масштабних коефіцієнтів BN, і після цього процесу встановлюємо малі коефіцієнти (і упередження) до 0, тоді ми бачимо, які канали ми можемо обрізати, не впливаючи на мережу. Це стосується всіх мережевих структур. У DenseNet фактично розмір коефіцієнтів масштабування відповідає розміру згортки через структуру "попередньої активації".

Параметр лямбда потребує налаштування для різних наборів даних та гіперпараметрів (наприклад, швидкості навчання), тому вам може знадобитися побачити остаточну продуктивність.

haithanhp прокоментовано 28 грудня 2017 р. •

Дякую за вашу відповідь. У мене є приклад однієї частини DenseNet-40 (k = 12):

[N, C, K, K]: [# фільтри, # канали, розмір_ядра, розмір_ядра]

"норма. вага" ось коефіцієнт масштабування при нормалізації партії. Для мене кожен шар нормальної ваги я намагаюся обрізати 40% # каналів нормалізації партії, що відповідає # фільтрам попередньої ваги конв. Та # каналам останньої ваги конв. Як ви можете обрізати вхідні та вихідні в цьому випадку? Будь ласка, виправте мене, якщо я допустив помилки під час обрізки.

До речі, коли параметри шарів обрізаються, як це впливає на продуктивність мережі? Чи є спосіб відстежити, як змінюється продуктивність ?

liuzhuang13 прокоментував 29 грудня 2017 р

У цьому базовому DenseNet ви можете обрізати лише вихідні ваги. Наприклад, якщо ви встановите 10 з 36 ваг та упереджень у них
module.features.denseblock_1.dense_basicblock_2.conv_33.norm.weight: torch.Size ([36])
module.features.denseblock_1.dense_basicblock_2.conv_33.norm.bias: torch.Size ([36])
до нулів, ви можете обрізати відповідні ваги (другий вимір) у
module.features.denseblock_1.dense_basicblock_2.conv_33.conv.weight: torch.Size ([12, 36, 3, 3]).

Можливо, ви могли б візуалізувати параметри масштабування, як на рис. 4 в роботі. Або ви можете контролювати ефективність на наборі перевірки. Виходячи з мого досвіду, не дуже важко підібрати значення.

haithanhp прокоментував 29 грудня 2017 р

Коли другий вимір конв. Ваги обрізано до 26 (обрізати 10), розмір активації введення все ще становить 36, і він не буде збігатися. Як ви можете зробити оператор згортки в цьому випадку?

Дякую, я також намагаюся візуалізувати значення за допомогою лямбда-ласо 1e-5 та 1e-4, і є багато значень біля нуля.