ส่งกลับส่วนที่เป็นลายเส้นจาก "อินพุต"
โปรดทราบว่าผู้ใช้ python ส่วนใหญ่ต้องการใช้ Python Tensor.__getitem__
หรือ Variable.__getitem__
แทนที่จะใช้ op นี้โดยตรง
เป้าหมายของการดำเนินการนี้คือการสร้างเทนเซอร์ใหม่ด้วยเซตย่อยขององค์ประกอบจากเทนเซอร์อินพุต 'n' มิติ เซ็ตย่อยถูกเลือกโดยใช้ลำดับของข้อกำหนดเฉพาะช่วงกระจัดกระจาย 'm' ที่เข้ารหัสลงในอาร์กิวเมนต์ของฟังก์ชันนี้ โปรดทราบว่าในบางกรณี `m` อาจเท่ากับ 'n` แต่ก็ไม่จำเป็นต้องเป็นเช่นนั้น แต่ละรายการข้อกำหนดเฉพาะช่วงสามารถเป็นหนึ่งในรายการต่อไปนี้:
- จุดไข่ปลา (...) จุดไข่ปลาใช้เพื่อบอกเป็นนัยถึงมิติข้อมูลของการเลือกขนาดเต็มเป็นศูนย์หรือมากกว่า และสร้างขึ้นโดยใช้ `ellipsis_mask` ตัวอย่างเช่น `foo[...]` คือส่วนข้อมูลประจำตัว
- แกนใหม่ ใช้เพื่อแทรกรูปร่างใหม่=1 มิติ และสร้างขึ้นโดยใช้ `new_axis_mask` ตัวอย่างเช่น `foo[:, ...]` โดยที่ `foo` มีรูปร่าง `(3, 4)` จะสร้างเทนเซอร์ `(1, 3, 4)`
- ช่วง `เริ่มต้น:สิ้นสุด:ก้าวย่าง` ใช้เพื่อระบุจำนวนที่จะเลือกจากมิติข้อมูลที่กำหนด `stride` อาจเป็นจำนวนเต็มใดก็ได้ แต่ 0 `begin` เป็นจำนวนเต็มซึ่งแสดงถึงดัชนีของค่าแรกที่จะเลือก ในขณะที่ `end` แสดงถึงดัชนีของค่าสุดท้ายที่จะเลือก จำนวนค่าที่เลือกในแต่ละมิติคือ `end - start` ถ้า `stride > 0` และ `begin - end` ถ้า `stride < 0` `begin` และ `end` อาจเป็นค่าลบ โดยที่ `-1` เป็นองค์ประกอบสุดท้าย `-2` คือองค์ประกอบที่สองต่อท้าย `begin_mask` ควบคุมว่าจะแทนที่ `begin` ที่กำหนดไว้อย่างชัดเจนด้วยค่าประสิทธิผลโดยนัยเป็น `0` หาก `stride > 0` และ `-1` หาก `stride < 0` `end_mask` นั้นคล้ายคลึงกัน แต่สร้างตัวเลขที่จำเป็นในการสร้างช่วงเวลาเปิดที่ใหญ่ที่สุด ตัวอย่างเช่น เมื่อกำหนดรูปร่าง `(3,)` เทนเซอร์ `foo[:]` แล้ว `begin` และ `end` ที่มีประสิทธิผลคือ `0` และ `3` อย่าถือว่าสิ่งนี้เทียบเท่ากับ `foo[0:-1]` ซึ่งมี `begin` และ `end` ที่มีประสิทธิภาพเป็น `0` และ `2` อีกตัวอย่างหนึ่งคือ `foo[-2::-1]` ซึ่งกลับมิติแรกของเมตริกซ์โดยทิ้งสองตัวสุดท้าย (ในองค์ประกอบลำดับดั้งเดิม) ตัวอย่างเช่น `foo = [1,2,3,4]; foo[-2::-1]` คือ `[4,3]`
- ดัชนีเดียว ใช้เพื่อเก็บเฉพาะองค์ประกอบที่มีดัชนีที่กำหนด ตัวอย่างเช่น (`foo[2, :]` บนรูปร่าง `(5,6)` เทนเซอร์จะสร้างรูปร่าง `(6,)` เทนเซอร์ ซึ่งมีการเข้ารหัสใน `begin` และ `end` และ `shrink_axis_mask`
ข้อกำหนดช่วงแนวคิดแต่ละข้อถูกเข้ารหัสในอาร์กิวเมนต์ของ op การเข้ารหัสนี้เป็นที่เข้าใจได้ดีที่สุดโดยการพิจารณาตัวอย่างที่ไม่สำคัญ โดยเฉพาะอย่างยิ่ง `foo[1, 2:4, None, ..., :-3:-1, :]` จะถูกเข้ารหัสเป็น
begin = [1, 2, x, x, 0, x] # x denotes don't care (usually 0)
end = [2, 4, x, x, -3, x]
strides = [1, 1, x, x, -1, 1]
begin_mask = 1<<4 | 1<<5 = 48
end_mask = 1<<5 = 32
ellipsis_mask = 1<<3 = 8
new_axis_mask = 1<<2 = 4
shrink_axis_mask = 1<<0 = 1
1. อาร์กิวเมนต์แรกในส่วนตัวอย่างจะเปลี่ยนเป็น `begin = 1` และ `end = beginning + 1 = 2` เพื่อแยกความกำกวมจากข้อมูลจำเพาะดั้งเดิม `2:4` เรายังตั้งค่าบิตที่เหมาะสมใน `shrink_axis_mask` ด้วย
2. `2:4` มีส่วนช่วยให้ 2, 4, 1 เริ่มต้น สิ้นสุด และก้าวเดิน มาสก์ทั้งหมดมีส่วนสนับสนุนเป็นศูนย์บิต
3. ไม่มี เป็นคำพ้องสำหรับ tf.newaxis
ซึ่งหมายถึงการแทรกมิติขนาด 1 มิติลงในรูปร่างสุดท้าย ค่าจำลองมีส่วนช่วยในการเริ่มต้น สิ้นสุด และก้าวย่าง ในขณะที่บิต new_axis_mask ถูกตั้งค่า
4. `...` หยิบช่วงทั้งหมดจากมิติข้อมูลมากเท่าที่จำเป็นเพื่อระบุส่วนข้อมูลให้ครบถ้วนสำหรับทุกมิติของรูปร่างอินพุต
5. `:-3:-1` แสดงการใช้ดัชนีเชิงลบ ดัชนีเชิงลบ `i` ที่เกี่ยวข้องกับมิติที่มีรูปร่าง `s` จะถูกแปลงเป็นดัชนีบวก `s + i` ดังนั้น `-1` จะกลายเป็น `s-1` (นั่นคือองค์ประกอบสุดท้าย) การแปลงนี้เสร็จสิ้นภายใน ดังนั้น เริ่มต้น สิ้นสุด และก้าวย่างจะได้รับ x, -3 และ -1 บิต beginning_mask ที่เหมาะสมได้รับการตั้งค่าเพื่อระบุว่าช่วงเริ่มต้นคือช่วงเต็ม (ไม่สนใจ x)
6. `:` บ่งชี้ว่ามีการเลือกเนื้อหาทั้งหมดของมิติที่เกี่ยวข้อง ซึ่งเทียบเท่ากับ `::` หรือ `0::1` เริ่มต้น สิ้นสุด และก้าวเดินจะได้รับ 0, 0 และ 1 ตามลำดับ บิตที่เหมาะสมใน `begin_mask` และ `end_mask` ก็ได้รับการตั้งค่าเช่นกัน
ข้อกำหนด : `0 != strides[i] สำหรับ i ใน [0, m)` `ellipsis_mask ต้องเป็นเลขยกกำลังสอง (จุดไข่ปลาเพียงอันเดียว)`
คลาสที่ซ้อนกัน
ระดับ | StridedSlice ตัวเลือก | แอ็ตทริบิวต์ทางเลือกสำหรับ StridedSlice |
วิธีการสาธารณะ
เอาท์พุต <T> | เป็นเอาท์พุต () ส่งกลับค่าแฮนเดิลสัญลักษณ์ของเทนเซอร์ |
StridedSlice.Options แบบคงที่ | beginningMask (เริ่มต้นมาสก์แบบยาว) |
คงที่ <T, U ขยายจำนวน> StridedSlice <T> | |
StridedSlice.Options แบบคงที่ | ellipsisMask (รียาว ellipsisMask) |
StridedSlice.Options แบบคงที่ | endMask (มาสก์ปลายยาว) |
StridedSlice.Options แบบคงที่ | newAxisMask (ใหม่ AxisMask แบบยาว) |
เอาท์พุต <T> | เอาท์พุท () |
StridedSlice.Options แบบคงที่ | ShrinkAxisMask (หดยาว AxisMask) |
วิธีการสืบทอด
วิธีการสาธารณะ
เอาท์พุท สาธารณะ <T> asOutput ()
ส่งกลับค่าแฮนเดิลสัญลักษณ์ของเทนเซอร์
อินพุตสำหรับการดำเนินการ TensorFlow คือเอาต์พุตของการดำเนินการ TensorFlow อื่น วิธีการนี้ใช้เพื่อรับหมายเลขอ้างอิงสัญลักษณ์ที่แสดงถึงการคำนวณอินพุต
StridedSlice.Options สาธารณะแบบคงที่ ( BeginMask แบบยาว)
พารามิเตอร์
เริ่มต้นหน้ากาก | บิตมาสก์โดยที่บิต i เป็น 1 หมายถึงละเว้นค่าเริ่มต้นและใช้ช่วงเวลาที่ใหญ่ที่สุดที่เป็นไปได้แทน ที่รันไทม์ start[i] จะถูกแทนที่ด้วย `[0, n-1)` ถ้า `stride[i] > 0` หรือ `[-1, n-1]` ถ้า `stride[i] < 0` |
---|
สร้าง StridedSlice <T> แบบคงที่สาธารณะ (ขอบเขต ขอบเขต , อินพุต Operand <T>, Operand <U> เริ่มต้น, Operand <U> สิ้นสุด, Operand <U> ก้าว, ตัวเลือก... ตัวเลือก)
วิธีการจากโรงงานเพื่อสร้างคลาสที่รวมการดำเนินการ StridedSlice ใหม่
พารามิเตอร์
ขอบเขต | ขอบเขตปัจจุบัน |
---|---|
เริ่ม | `begin[k]` ระบุออฟเซ็ตในข้อกำหนดช่วง `k` มิติข้อมูลที่แน่นอนซึ่งสอดคล้องจะถูกกำหนดโดยบริบท ค่านอกขอบเขตจะถูกบีบอย่างเงียบๆ หากบิตที่ `k` ของ `begin_mask` ดังนั้น `begin[k]` จะถูกละเว้น และใช้มิติข้อมูลที่เหมาะสมทั้งหมดแทน ค่าลบทำให้การจัดทำดัชนีเริ่มต้นจากองค์ประกอบสูงสุด เช่น ถ้า `foo==[1,2,3]` ดังนั้น `foo[-1]==3` |
จบ | `end[i]` เป็นเหมือน `begin` โดยมีข้อยกเว้นว่า `end_mask` ใช้เพื่อกำหนดช่วงทั้งหมด |
ความก้าวหน้า | `strides[i]` ระบุการเพิ่มขึ้นในข้อกำหนด `i`th หลังจากแยกองค์ประกอบที่กำหนด ดัชนีเชิงลบจะกลับลำดับเดิม ค่านอกหรือช่วงจะถูกบีบไว้ที่ `[0,dim[i]) ถ้าเป็นชิ้น[i]>0` หรือ `[-1,dim[i]-1] ถ้าเป็นชิ้น[i] < 0` |
ตัวเลือก | มีค่าแอตทริบิวต์ทางเลือก |
การส่งคืน
- ตัวอย่างใหม่ของ StridedSlice
StridedSlice.Options ellipsisMask แบบ คงที่สาธารณะ (Long ellipsisMask)
พารามิเตอร์
จุดไข่ปลาMask | บิตมาสก์โดยที่บิต `i` เป็น 1 หมายความว่าตำแหน่ง `i` จริงๆ แล้วเป็นจุดไข่ปลา มากสุดหนึ่งบิตสามารถเป็น 1 ได้ หาก `ellipsis_mask == 0` ก็จะมีมาสก์จุดไข่ปลาโดยนัยเป็น `1 << (m+1)` ซึ่งหมายความว่า `foo[3:5] == foo[3:5, ...]` จุดไข่ปลาจะสร้างข้อกำหนดเฉพาะของช่วงได้มากเท่าที่จำเป็นเพื่อระบุช่วงที่แบ่งสำหรับทุกมิติโดยสมบูรณ์ ตัวอย่างเช่น สำหรับเมตริกซ์ 4 มิติ `foo` ส่วน `foo[2, ..., 5:8]` หมายถึง `foo[2, :, :, 5:8]` |
---|
สาธารณะ StridedSlice.Options endMask แบบคงที่ (Long endMask)
พารามิเตอร์
สิ้นสุดหน้ากาก | คล้ายคลึงกับ `begin_mask` |
---|
StridedSlice.Options สาธารณะแบบคงที่ newAxisMask (แบบยาว newAxisMask)
พารามิเตอร์
ใหม่AxisMask | บิตมาสก์โดยที่บิต `i` เป็น 1 หมายความว่าข้อกำหนด `i`th จะสร้างมิติรูปร่างใหม่ 1 ตัวอย่างเช่น `foo[:4, tf.newaxis, :2]` จะสร้างเทนเซอร์รูปร่าง `(4, 1, 2)` |
---|
StridedSlice.Options แบบคงที่สาธารณะ ShrinkAxisMask (Long ShrinkAxisMask)
พารามิเตอร์
ShrinkAxisMask | บิตมาสก์โดยที่บิต `i` บ่งบอกว่าข้อกำหนด `i` ควรลดขนาดมิติลง เริ่มต้นและสิ้นสุดต้องหมายถึงส่วนขนาด 1 ในมิติ ตัวอย่างเช่น ใน python อาจทำ `foo[:, 3, :]` ซึ่งจะส่งผลให้ `shrink_axis_mask` เป็น 2 |
---|