Sự khác biệt duy nhất là chiều của không gian đầu vào. Đầu vào cho một lớp chập có hình dạng sau:
input_shape = (batch_size, input_dims, kênh)
Hình dạng đầu vào cho conv1D : (batch_size, W, kênh)
Ví dụ: Tín hiệu giọng nói stereo 1 giây được lấy mẫu ở 44100 Hz, hình dạng: (batch_size, 44100,2)
Hình dạng đầu vào cho conv2D : (batch_size, (H, W), kênh)
Ví dụ: hình ảnh 32x32 RGB, hình dạng: (batch_size, 32,32,3)
Hình dạng đầu vào cho conv3D : (batch_size, (H, w, D), kênh)
Ví dụ (khó hơn): video 1 giây của hình ảnh 32x32 RGB ở 24 khung hình / giây, hình dạng: (batch_size, 32,32,3,24)
Kênh là gì?
Điều quan trọng là suy nghĩ về ý nghĩa của kênh đối với dữ liệu đầu vào của chúng tôi. Lớp chập áp dụng các bộ lọc khác nhau cho mỗi kênh, do đó, các trọng số của lớp đối lưu có hình dạng sau:
(kernel_size,num_channels,num_filter_per_channels)
Thí dụ:
Lớp kết hợp với 12 bộ lọc và ma trận nhân vuông có kích thước 3. Lớp này sẽ áp dụng 12 bộ lọc khác nhau cho mỗi kênh. Trong các ví dụ đã nêu trước đây:
Tín hiệu thoại stereo 1 giây được lấy mẫu ở 44100 Hz, kernel_size = 3
12 x 2 = 24 bộ lọc một chiều, 12 bộ lọc cho mỗi kênh
Weigths shape: (3, 2, 12)
Hình ảnh 32x32 RGB, kernel_size = (3,3)
12 x 3 = 36 bộ lọc hai chiều, 12 bộ lọc cho mỗi kênh
Weights shape: (3, 3, 3, 12)
Video 1 giây của hình ảnh 32x32 RGB ở 24 khung hình / giây, kernel_size = (3,3,3)
24 x 12 = 288 bộ lọc ba chiều, 12 bộ lọc cho mỗi kênh
Weights shape: (3, 3, 3, 24, 12)
Do đó, việc quyết định ý nghĩa của kênh là rất quan trọng, vì mỗi kênh có bộ bộ lọc riêng. Đối với các ví dụ đầu tiên, dường như rất đơn giản để quyết định rằng tín hiệu âm thanh nổi và hình ảnh RGB là các kênh khác nhau ... chúng thường được đặt tên như vậy (kênh âm thanh nổi, kênh RGB). Trong ví dụ về video, nó mơ hồ hơn ... Đặt video làm đầu vào 3D với kích thước tạm thời vì kênh có thể không phải là lựa chọn tốt nhất vì theo cách đó, thứ tự mà các khung thời gian không thành vấn đề (đầu ra cho các bộ lọc của mỗi kênh được tóm tắt) dẫn đến mất động lực thời gian nội tại của dữ liệu đầu vào. Một cách tiếp cận tốt hơn (tùy thuộc vào ứng dụng) là xử lý hình ảnh RGB với các kết cấu 2D trong mạng thần kinh tái phát. Điều tương tự cũng xảy ra với tín hiệu thoại,
Điều quan trọng cần lưu ý là tín hiệu có thứ nguyên đầu vào D có thể được coi là tín hiệu có thứ nguyên D + 1 với một kênh, nhưng không gian tính năng kết quả có thể ít đại diện / hữu ích hơn :
(44100,2) --> expand_dimension(axis=-1)--> ((44100,2),1)
Mã Keras áp dụng các ví dụ
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))