StridedSlice

StridedSlice คลาสสุดท้ายสาธารณะ

ส่งกลับส่วนที่เป็นลายเส้นจาก "อินพุต"

โปรดทราบว่าผู้ใช้ 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&lt;&lt;4 | 1&lt;&lt;5 = 48
 end_mask = 1&lt;&lt;5 = 32
 ellipsis_mask = 1&lt;&lt;3 = 8
 new_axis_mask = 1&lt;&lt;2 = 4
 shrink_axis_mask = 1&lt;&lt;0 = 1
 
ในกรณีนี้ ถ้า `foo.shape` คือ (5, 5, 5, 5, 5, 5) รูปร่างสุดท้ายของชิ้นจะกลายเป็น (2, 1, 5, 5, 2, 5) ให้เราอธิบายทีละขั้นตอนผ่านข้อกำหนดข้อโต้แย้งแต่ละข้อ

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>
สร้าง (ขอบเขต ขอบเขต , อินพุต Operand <T>, Operand <U> เริ่มต้น, Operand <U> ปลาย, Operand <U> ก้าว, ตัวเลือก... ตัวเลือก)
วิธีการจากโรงงานเพื่อสร้างคลาสที่รวมการดำเนินการ StridedSlice ใหม่
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)`

เอาท์พุท สาธารณะ <T> เอาท์พุท ()

StridedSlice.Options แบบคงที่สาธารณะ ShrinkAxisMask (Long ShrinkAxisMask)

พารามิเตอร์
ShrinkAxisMask บิตมาสก์โดยที่บิต `i` บ่งบอกว่าข้อกำหนด `i` ควรลดขนาดมิติลง เริ่มต้นและสิ้นสุดต้องหมายถึงส่วนขนาด 1 ในมิติ ตัวอย่างเช่น ใน python อาจทำ `foo[:, 3, :]` ซึ่งจะส่งผลให้ `shrink_axis_mask` เป็น 2