ฉันมีคำถามเดียวกันกับที่คุณอ่านกระดาษสีขาวและทรัพยากรที่คุณอ้างอิงได้ช่วยให้ฉันนำไปปฏิบัติ
ในรหัส Torch ที่คุณอ้างถึงจะกล่าวว่า:
--[[ DepthConcat ]]--
-- Concatenates the output of Convolutions along the depth dimension
-- (nOutputFrame). This is used to implement the DepthConcat layer
-- of the Going deeper with convolutions paper :
คำว่า "ความลึก" ในการเรียนรู้ลึกนั้นมีความคลุมเครือเล็กน้อย โชคดีที่คำตอบ SOนี้ให้ความกระจ่าง:
ใน Deep Neural Networks ความลึกหมายถึงความลึกของเครือข่าย แต่ในบริบทนี้ความลึกจะใช้สำหรับการจดจำภาพและแปลเป็นมิติที่ 3 ของรูปภาพ
ในกรณีนี้คุณมีภาพและขนาดของอินพุตนี้คือ 32x32x3 ซึ่งเป็น (ความกว้างความสูงความลึก) โครงข่ายใยประสาทเทียมควรจะสามารถเรียนรู้ได้จากพารามิเตอร์นี้เมื่อความลึกแปลเป็นช่องทางต่าง ๆ ของภาพการฝึกอบรม
ดังนั้น DepthConcat จะเชื่อมต่อเทนเซอร์กับมิติความลึกซึ่งเป็นมิติสุดท้ายของเทนเซอร์และในกรณีนี้คือมิติที่ 3 ของเทนเซอร์ 3D
DepthConcat ต้องทำให้เทนเซอร์เหมือนกันในทุกมิติยกเว้นมิติความลึกตามที่รหัส Torchบอกว่า:
-- The normal Concat Module can't be used since the spatial dimensions
-- of tensors to be concatenated may have different values. To deal with
-- this, we select the largest spatial dimensions and add zero-padding
-- around the smaller dimensions.
เช่น
A = tensor of size (14, 14, 2)
B = tensor of size (16, 16, 3)
result = DepthConcat([A, B])
where result with have a height of 16, a width of 16 and a depth of 5 (2 + 3).
ในแผนภาพด้านบนเราเห็นรูปภาพของ DepthConcat ผลลัพธ์ตัวนับซึ่งพื้นที่สีขาวเป็นศูนย์ padding สีแดงคือตัวเทนเซอร์ A และสีเขียวคือเทนเซอร์ B
นี่คือรหัสเทียมสำหรับ DepthConcat ในตัวอย่างนี้:
- ดูเทนเซอร์ A และเทนเซอร์ B และหามิติเชิงพื้นที่ที่ใหญ่ที่สุดซึ่งในกรณีนี้จะเป็นความกว้าง 16 และ 16 สูงของเมตริกซ์ B เนื่องจากเมตริกซ์ A มีขนาดเล็กเกินไปและไม่ตรงกับมิติเชิงพื้นที่ของ Tensor B ดังนั้นจึงต้องมีการบุรอง
- วางมิติอวกาศของเทนเซอร์ A กับศูนย์ด้วยการเพิ่มศูนย์ไปยังมิติที่หนึ่งและสองทำให้ขนาดของเทนเซอร์ A (16, 16, 2)
- เชื่อมต่อเทนเซอร์บุนวม A พร้อมตัวเทนเซอร์ B ตามมิติความลึก (3)
ฉันหวังว่านี่จะช่วยให้คนอื่นที่คิดคำถามเดียวกันอ่านกระดาษสีขาวนั้น