Відповіді:
Єдина відмінність - розмірність вхідного простору. Вхід для згорткового шару має таку форму:
input_shape = (batch_size, input_dims, канали)
Форма вводу для conv1D : (batch_size, W, канали)
Приклад: 1-секундний стерео-голосовий сигнал, відібраний на частоті 44100 Гц, форма: (batch_size, 44100,2)
Форма вводу для conv2D : (batch_size, (H, W), канали)
Приклад: зображення 32х32 RGB, форма: (batch_size, 32,32,3)
Форма вводу для conv3D : (batch_size, (H, w, D), канали)
Приклад (більш складний): 1-секундне відео 32x32 RGB-зображень при 24 к / с, форма: (batch_size, 32,32,3,24)
Що таке канал?
Головне - подумати про те, що означає канал для наших вхідних даних. Згорнутий шар застосовують різні фільтри для кожного каналу, таким чином, ваги конвуз-шару мають таку форму:
(kernel_size,num_channels,num_filter_per_channels)
Приклад:
Згорнутий шар з 12 фільтрами та квадратною матрицею ядра розміром 3. Цей шар застосовуватиме 12 різних фільтрів для кожного каналу. У наведених раніше прикладах:
1 секунда стереозвукового голосового сигналу, відібрана при 44100 Гц, kernel_size = 3
12 х 2 = 24 одновимірних фільтра, 12 фільтрів для кожного каналу
Weigths shape: (3, 2, 12)
32x32 RGB-зображення, kernel_size = (3,3)
12 х 3 = 36 двомірних фільтрів, 12 фільтрів для кожного каналу
Weights shape: (3, 3, 3, 12)
1 секундне відео з 32x32 RGB-зображеннями при 24 к / с, kernel_size = (3,3,3)
24 х 12 = 288 тривимірних фільтрів, 12 фільтрів для кожного каналу
Weights shape: (3, 3, 3, 24, 12)
Таким чином, вирішити, що означає канал, дуже важливо, оскільки кожен канал має свій набір фільтрів. У перших прикладах здається, що просто визначити, що стереосигнали та RGB-зображення є різними каналами ... вони зазвичай так називаються (стереоканали, RGB-канали). На прикладі відео, це неоднозначно ... Налаштування відео як 3D-вхід із тимчасовим виміром як каналу може бути не найкращим варіантом, оскільки таким чином порядок, у який надходять тимчасові кадри, не має значення (виходи для фільтри кожного каналу підсумовуються), що призводить до втрати внутрішньої часової динаміки вхідних даних. Одним кращим підходом (залежно від програми) є обробка зображень RGB з двовимірними згортками в періодичній нейронній мережі. Те саме відбувається з голосовим сигналом,
Важливо зазначити, що сигнал із вхідним розміром D може розглядатися як сигнал розміру D + 1 з одним каналом, але результуючий простір можливостей може бути менш репрезентативним / корисним :
(44100,2) --> expand_dimension(axis=-1)--> ((44100,2),1)
Код Кераса, що підтримує приклади
from keras import Input, Conv1D, Conv2D, Conv3D
#1D
in_ = Input(shape=(44100,2))
layer = Conv1D(filters=12,kernel_size=3)
out_ = layer(in_)
print("Weights shape: {}".format(layer.get_weights()[0].shape))
#2D
in_ = Input(shape=(32,32,3))
layer = Conv2D(filters=12,kernel_size=3)
out_ = layer(in_)
print("Weights shape: {}".format(layer.get_weights()[0].shape))
#3D
in_ = Input(shape=(32,32,3,24))
layer = Conv3D(filters=12,kernel_size=3)
out_ = layer(in_)
print("Weights shape: {}".format(layer.get_weights()[0].shape))
Conv1D використовується для вхідних сигналів, подібних голосовим. Використовуючи їх, ви можете знаходити схеми по всьому сигналу. Наприклад, у вас є голосовий сигнал і у вас згорнутий шар. Кожна згортка обходить голос, щоб знайти значущі зразки, використовуючи функцію витрат.
Conv2D використовується для зображень. Цей випадок використання дуже популярний. Метод згортання, що використовується для цього шару, називається згорткою над об'ємом . Це означає, що у вас є двомірне зображення, яке містить кілька каналів, RGB як приклад. У цьому випадку кожен згортковий фільтр повинен бути тривимірним фільтром, який слід перекрутити, насправді перекреслити, щоб зображення знаходило відповідні візерунки по всьому зображенню.
Conv3D зазвичай використовується для відео, де у вас є кадр для кожного періоду часу. Зазвичай ці шари мають вивчити більше параметрів, ніж попередні. Причина, яку ми називаємо їх полягає в тому, що крім зображень для кожного кадру, існує ще одна вісь, яка називається часом, що містить дискретні значення, і кожен з них відповідає певному кадру.