Satu-satunya perbedaan adalah dimensi ruang input. Input untuk lapisan konvolusional memiliki bentuk berikut:
input_shape = (batch_size, input_dims, saluran)
Bentuk input untuk conv1D : (batch_size, W, saluran)
Contoh: 1 detik sinyal suara stereo sampel pada 44100 Hz, bentuk: (batch_size, 44100,2)
Bentuk input untuk conv2D : (batch_size, (H, W), saluran)
Contoh: Gambar 32x32 RGB, bentuk: (batch_size, 32,32,3)
Bentuk input untuk conv3D : (batch_size, (H, w, D), saluran)
Contoh (lebih rumit): 1 detik video 32x32 gambar RGB pada 24 fps, bentuk: (batch_size, 32,32,3,24)
Apa itu saluran?
Kuncinya adalah memikirkan apa arti saluran untuk data input kami. Lapisan konvolusional menerapkan filter yang berbeda untuk setiap saluran, dengan demikian, bobot lapisan konv memiliki bentuk berikut:
(kernel_size,num_channels,num_filter_per_channels)
Contoh:
Lapisan konvolusional dengan 12 filter dan matriks kernel kuadrat ukuran 3. Lapisan ini akan menerapkan 12 filter berbeda untuk setiap saluran. Dalam contoh yang diberikan sebelumnya:
Sinyal suara stereo 1 detik disampel pada 44100 Hz, kernel_size = 3
12 x 2 = 24 filter satu dimensi, 12 filter untuk setiap saluran
Weigths shape: (3, 2, 12)
Gambar RGB 32x32, kernel_size = (3,3)
12 x 3 = 36 filter dua dimensi, 12 filter untuk setiap saluran
Weights shape: (3, 3, 3, 12)
Video 1 detik dari gambar 32x32 RGB pada 24 fps, kernel_size = (3,3,3)
24 x 12 = 288 filter tiga dimensi, 12 filter untuk setiap saluran
Weights shape: (3, 3, 3, 24, 12)
Jadi memutuskan apa arti saluran sangat penting, karena setiap saluran memiliki set filternya sendiri. Untuk contoh pertama, tampaknya mudah untuk memutuskan bahwa sinyal stereo dan gambar RGB adalah saluran yang berbeda ... mereka umumnya dinamai seperti itu (saluran stereo, saluran RGB) memang. Dalam contoh video, ini lebih ambigu ... Mengatur video sebagai input 3D dengan dimensi temporal sebagai saluran mungkin bukan pilihan terbaik karena dengan cara itu, urutan bingkai temporal datang tidak masalah (output untuk filter dari setiap saluran diringkas) yang mengakibatkan hilangnya dinamika temporal intrinsik dari data input. Satu pendekatan yang lebih baik (tergantung pada aplikasi) adalah untuk memproses gambar RGB dengan konvolusi 2D dalam jaringan saraf berulang. Hal yang sama terjadi dengan sinyal suara,
Penting untuk dicatat bahwa sinyal dengan dimensi input D dapat dianggap sebagai sinyal dimensi D + 1 dengan satu saluran, tetapi ruang fitur yang dihasilkan mungkin kurang representatif / berguna :
(44100,2) --> expand_dimension(axis=-1)--> ((44100,2),1)
Kode keras mendukung contoh-contoh
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))