SpaceToBatch สำหรับเทนเซอร์ ND ประเภท T
การดำเนินการนี้จะแบ่งมิติ "เชิงพื้นที่" `[1, ..., M]` ของอินพุตออกเป็นตารางของบล็อกที่มีรูปร่าง `block_shape` และแทรกบล็อกเหล่านี้ด้วยมิติ "แบทช์" (0) เพื่อให้ในเอาต์พุต ขนาดเชิงพื้นที่ `[1, ..., M]` สอดคล้องกับตำแหน่งภายในตาราง และมิติแบทช์จะรวมทั้งตำแหน่งภายในบล็อกเชิงพื้นที่และตำแหน่งแบทช์ดั้งเดิม ก่อนที่จะแบ่งออกเป็นบล็อก ขนาดเชิงพื้นที่ของอินพุตจะถูกเสริมเป็นศูนย์ตาม "ช่องว่างภายใน" ดูด้านล่างสำหรับคำอธิบายที่ชัดเจน
การดำเนินการนี้เทียบเท่ากับขั้นตอนต่อไปนี้:
1. Zero-pad จุดเริ่มต้นและจุดสิ้นสุดของขนาด `[1, ..., M]` ของอินพุตตาม `paddings` เพื่อสร้าง `padded` ของรูปร่าง `padded_shape`
2. ปรับรูปร่าง `padded` เป็น `reshape_padded` ของรูปร่าง:
[ชุด] + [padded_shape[1] / block_shape[0], block_shape[0], ..., padded_shape[M] / block_shape[M-1], block_shape[M-1]] + ส่วนที่เหลือ
3. ปรับขนาดของ `reshape_padded` เพื่อสร้าง `permuted_reshape_padded` ของรูปร่าง:
block_shape + [ชุด] + [padded_shape[1] / block_shape[0], ..., padded_shape[M] / block_shape[M-1]] + เหลือ _รูปร่าง
4. ปรับรูปร่าง `permuted_reshape_padded` ใหม่เพื่อให้ `block_shape` แบนลงในมิติแบทช์ ทำให้เกิดเทนเซอร์เอาท์พุตของรูปร่าง:
[batch * prod(block_shape)] + [padded_shape[1] / block_shape[0], ..., padded_shape[M] / block_shape[M-1]] + เหลือ_รูปร่าง
ตัวอย่างบางส่วน:
(1) สำหรับการป้อนรูปร่างต่อไปนี้ `[1, 2, 2, 1]`, `block_shape = [2, 2]` และ `paddings = [[0, 0], [0, 0]]`:
x = [[[[1], [2]], [[3], [4]]]]
เทนเซอร์เอาท์พุตมีรูปร่าง `[4, 1, 1, 1]` และค่า: [[[[1]]], [[[2]]], [[[3]]], [[[4]]]]
(2) สำหรับการป้อนรูปร่างต่อไปนี้ `[1, 2, 2, 3]`, `block_shape = [2, 2]` และ `paddings = [[0, 0], [0, 0]]`: x = [[[[1, 2, 3], [4, 5, 6]],
[[7, 8, 9], [10, 11, 12]]]]
เอาท์พุตเทนเซอร์มีรูปร่าง `[4, 1, 1, 3]` และค่า: [[[[1, 2, 3]]], [[[4, 5, 6]]], [[[7, 8, 9]]], [[[10, 11, 12]]]]
(3) สำหรับการป้อนรูปร่างต่อไปนี้ `[1, 4, 4, 1]`, `block_shape = [2, 2]` และ `paddings = [[0, 0], [0, 0]]`: x = [[[[1], [2], [3], [4]],
[[5], [6], [7], [8]],
[[9], [10], [11], [12]],
[[13], [14], [15], [16]]]]
เอาท์พุตเทนเซอร์มีรูปร่าง `[4, 2, 2, 1]` และค่า: x = [[[[1], [3]], [[9], [11]]],
[[[2], [4]], [[10], [12]]],
[[[5], [7]], [[13], [15]]],
[[[6], [8]], [[14], [16]]]]
(4) สำหรับการป้อนรูปร่างต่อไปนี้ `[2, 2, 4, 1]`, block_shape = `[2, 2]` และช่องว่างภายใน = `[[0, 0], [2, 0]]`: x = [[[[1], [2], [3], [4]],
[[5], [6], [7], [8]]],
[[[9], [10], [11], [12]],
[[13], [14], [15], [16]]]]
เอาท์พุตเทนเซอร์มีรูปร่าง `[8, 1, 3, 1]` และค่า: x = [[[[0], [1], [3]]], [[[0], [9], [11]]],
[[[0], [2], [4]]], [[[0], [10], [12]]],
[[[0], [5], [7]]], [[[0], [13], [15]]],
[[[0], [6], [8]]], [[[0], [14], [16]]]]
เหนือสิ่งอื่นใด การดำเนินการนี้มีประโยชน์ในการลดภาวะกล้ามเนื้อมัดใหญ่ให้กลายเป็นการมัดแบบปกติ วิธีการสาธารณะ
เอาท์พุต <T> | เป็นเอาท์พุต () ส่งกลับค่าแฮนเดิลสัญลักษณ์ของเทนเซอร์ |
คงที่ <T, U ขยายหมายเลข, V ขยายหมายเลข> SpaceToBatchNd <T> | |
เอาท์พุต <T> | เอาท์พุท () |
วิธีการสืบทอด
วิธีการสาธารณะ
เอาท์พุท สาธารณะ <T> asOutput ()
ส่งกลับค่าแฮนเดิลสัญลักษณ์ของเทนเซอร์
อินพุตสำหรับการดำเนินการ TensorFlow คือเอาต์พุตของการดำเนินการ TensorFlow อื่น วิธีการนี้ใช้เพื่อรับหมายเลขอ้างอิงสัญลักษณ์ที่แสดงถึงการคำนวณอินพุต
สร้าง SpaceToBatchNd <T> แบบคงที่สาธารณะ (ขอบเขต ขอบเขต , อินพุต Operand <T>, Operand <U> blockShape, ช่องว่างภายใน Operand <V>)
วิธีการจากโรงงานเพื่อสร้างคลาสที่รวมการดำเนินการ SpaceToBatchNd ใหม่
พารามิเตอร์
ขอบเขต | ขอบเขตปัจจุบัน |
---|---|
ป้อนข้อมูล | ND ที่มีรูปร่าง `input_shape = [ชุด] + รูปร่างเชิงพื้นที่ + รูปร่างที่เหลือ` โดยที่รูปร่างเชิงพื้นที่มีขนาด 'M` |
บล็อกรูปร่าง | 1-D ที่มีรูปร่าง `[M]` ค่าทั้งหมดต้องเป็น >= 1 |
ช่องว่างภายใน | 2-D ที่มีรูปร่าง `[M, 2]` ค่าทั้งหมดต้องเป็น >= 0 `paddings[i] = [pad_start, pad_end]` ระบุช่องว่างภายในสำหรับมิติอินพุต `i + 1` ซึ่งสอดคล้องกับมิติเชิงพื้นที่ `ฉัน` กำหนดให้ `block_shape[i]` หาร `input_shape[i + 1] + pad_start + pad_end` |
การส่งคืน
- อินสแตนซ์ใหม่ของ SpaceToBatchNd