ข้อแตกต่างคือขนาดของพื้นที่อินพุต อินพุตสำหรับเลเยอร์ convolutional มีรูปร่างดังต่อไปนี้:
input_shape = (batch_size, input_dims, ช่อง)
รูปร่างอินพุตสำหรับconv1D : (batch_size, W, แชนเนล)
ตัวอย่าง: สัญญาณเสียงสเตอริโอ 1 วินาทีสุ่มตัวอย่างที่ 44100 Hz, รูปร่าง: (batch_size, 44100,2)
รูปร่างอินพุตสำหรับconv2D : (batch_size, (H, W), ช่อง)
ตัวอย่าง: ภาพ RGB 32x32, รูปร่าง: (batch_size, 32,32,3)
รูปร่างอินพุตสำหรับconv3D : (batch_size, (H, w, D), ช่อง)
ตัวอย่าง (หากินมากขึ้น): วิดีโอ 1 วินาทีของภาพ RGB ขนาด 32x32 ที่ 24 fps, รูปร่าง: (batch_size, 32,32,3,24)
ช่องคืออะไร
สิ่งสำคัญคือการคิดเกี่ยวกับความหมายของช่องสัญญาณสำหรับข้อมูลอินพุตของเรา เลเยอร์ convolutional ใช้ฟิลเตอร์ที่แตกต่างกันสำหรับแต่ละแชแนลดังนั้นน้ำหนักของเลเยอร์ Conv มีรูปร่างดังต่อไปนี้:
(kernel_size,num_channels,num_filter_per_channels)
ตัวอย่าง:
ชั้น Convolutional ที่มีตัวกรอง 12 ตัวและตารางเคอร์เนลเมทริกซ์ขนาด 3 ชั้นนี้จะใช้ตัวกรอง 12 แบบที่แตกต่างกันสำหรับแต่ละช่อง ในตัวอย่างที่ให้ไว้ก่อนหน้านี้:
ตัวอย่างสัญญาณเสียงสเตอริโอ 1 วินาทีที่ 44100 Hz, kernel_size = 3
12 x 2 = 24 ตัวกรองหนึ่งมิติ 12 ตัวกรองสำหรับแต่ละช่อง
Weigths shape: (3, 2, 12)
รูปภาพ RGB ขนาด 32x32, kernel_size = (3,3)
12 x 3 = 36 ตัวกรองสองมิติ, 12 ตัวกรองสำหรับแต่ละช่อง
Weights shape: (3, 3, 3, 12)
วิดีโอความยาว 1 วินาทีของภาพ RGB ขนาด 32x32 ที่ 24 fps, kernel_size = (3,3,3)
24 x 12 = 288 ฟิลเตอร์สามมิติ, 12 ฟิลเตอร์สำหรับแต่ละช่อง
Weights shape: (3, 3, 3, 24, 12)
ดังนั้นการตัดสินใจว่าช่องหมายถึงอะไรมีความสำคัญมากเนื่องจากแต่ละช่องมีชุดตัวกรองของตัวเอง สำหรับตัวอย่างแรกดูเหมือนว่าตรงไปตรงมาในการตัดสินใจว่าสัญญาณสเตอริโอและภาพ RGB เป็นช่องทางที่แตกต่างกัน ... พวกเขามักจะตั้งชื่อแบบนั้น (ช่องสเตอริโอ, ช่อง RGB) แน่นอน ในตัวอย่างวิดีโอมันมีความคลุมเครือมากกว่า ... การตั้งค่าวิดีโอเป็นอินพุต 3D ด้วยมิติตามเวลาขณะที่ช่องทางอาจไม่ใช่ตัวเลือกที่ดีที่สุดเนื่องจากวิธีการนี้ลำดับที่เฟรมตามกาลเวลานั้นไม่สำคัญ (ผลลัพธ์สำหรับ ตัวกรองของแต่ละช่องสัญญาณจะถูกสรุป) ทำให้สูญเสียพลวัตทางอินทรินที่แท้จริงของข้อมูลอินพุต วิธีการที่ดีกว่าวิธีหนึ่ง (ขึ้นอยู่กับแอปพลิเคชัน) คือการประมวลผลภาพ RGB ด้วยการโน้มน้าวใจ 2D ในเครือข่ายประสาทที่เกิดขึ้นอีก เช่นเดียวกันกับสัญญาณเสียง
สิ่งสำคัญคือต้องทราบว่าสัญญาณที่มีขนาดอินพุต D ถือได้ว่าเป็นสัญญาณของมิติ D + 1 ที่มีหนึ่งช่องสัญญาณ แต่พื้นที่ของคุณสมบัติที่ได้อาจเป็นตัวแทน / ประโยชน์น้อยกว่า:
(44100,2) --> expand_dimension(axis=-1)--> ((44100,2),1)
รหัส Keras สนับสนุนตัวอย่าง
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))