ScatterNd

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

กระจาย 'อัปเดต' เป็นเทนเซอร์ของรูปร่าง 'รูปร่าง' ตาม 'ดัชนี'

กระจาย "อัปเดต" แบบกระจัดกระจายตามแต่ละค่าที่ "ดัชนี" ที่ระบุ op นี้ส่งคืนเทนเซอร์เอาต์พุตด้วย `รูปร่าง` ที่คุณระบุ op นี้เป็นค่าผกผันของตัวดำเนินการ tf.gather_nd ซึ่งจะแยกค่าหรือส่วนต่างๆ จากเทนเซอร์ที่กำหนด

การดำเนินการนี้คล้ายกับ tf.tensor_scatter_nd_add ยกเว้นว่าเทนเซอร์จะเริ่มต้นเป็นศูนย์ การเรียก tf.scatter_nd(indices, updates, shape) เหมือนกับการเรียก `tf.tensor_scatter_nd_add(tf.zeros(shape, Updates.dtype), indices, Updates)`

หาก "ดัชนี" มีรายการซ้ำ "การอัปเดต" ที่เกี่ยวข้องจะถูกสะสม (สรุป) ลงในเทนเซอร์เอาท์พุต

คำเตือน : สำหรับชนิดข้อมูลทศนิยม ผลลัพธ์อาจไม่ถูกกำหนดไว้ เนื่องจากลำดับที่ใช้การอัปเดตนั้นไม่ได้กำหนดไว้ และเมื่อมีการเพิ่มตัวเลขจุดลอยตัวในลำดับที่แตกต่างกัน ข้อผิดพลาดในการประมาณตัวเลขที่เกิดขึ้นอาจแตกต่างกันเล็กน้อย อย่างไรก็ตาม ผลลัพธ์จะถูกกำหนดหากมีการเปิดใช้งานการกำหนด op ผ่าน tf.config.experimental.enable_op_determinism

`indices` คือเทนเซอร์จำนวนเต็มที่มีดัชนีอยู่ในเทนเซอร์เอาท์พุต มิติสุดท้ายของ "ดัชนี" สามารถอยู่ในอันดับสูงสุดของ "รูปร่าง" ได้:

indices.shape[-1] <= รูปร่างอันดับ

มิติสุดท้ายของ `ดัชนี` สอดคล้องกับดัชนีขององค์ประกอบ (หาก `indices.shape[-1] = รูปร่างอันดับ`) หรือชิ้น (หาก `indices.shape[-1] < รูปร่างอันดับ`) ตามแนวมิติ `ดัชนี .shape[-1]` ของ `รูปร่าง`

`updates` เป็นเทนเซอร์ที่มีรูปร่าง:

ดัชนีรูปร่าง[:-1] + รูปร่าง[ดัชนีรูปร่าง[-1]:]

รูปแบบที่ง่ายที่สุดของการกระจาย op คือการแทรกแต่ละองค์ประกอบในเทนเซอร์ตามดัชนี ลองพิจารณาตัวอย่างที่คุณต้องการแทรกองค์ประกอบที่กระจัดกระจาย 4 องค์ประกอบในเทนเซอร์อันดับ 1 โดยมี 8 องค์ประกอบ

ใน Python การดำเนินการกระจายนี้จะมีลักษณะดังนี้:

indices = tf.constant([[4], [3], [1], [7]])
     updates = tf.constant([9, 10, 11, 12])
     shape = tf.constant([8])
     scatter = tf.scatter_nd(indices, updates, shape)
     print(scatter)
 
เทนเซอร์ที่ได้จะมีลักษณะดังนี้:

[0, 11, 0, 10, 9, 0, 0, 12]

คุณยังสามารถแทรกเทนเซอร์อันดับสูงกว่าทั้งหมดได้ในคราวเดียว ตัวอย่างเช่น คุณสามารถแทรกสองส่วนในมิติแรกของเทนเซอร์อันดับ 3 พร้อมด้วยเมทริกซ์ใหม่สองค่า

ใน Python การดำเนินการกระจายนี้จะมีลักษณะดังนี้:

indices = tf.constant([[1], [3]])
     updates = tf.constant([[[5, 5, 5, 5], [6, 6, 6, 6],
                             [7, 7, 7, 7], [8, 8, 8, 8]],
                            [[5, 5, 5, 5], [6, 6, 6, 6],
                             [7, 7, 7, 7], [8, 8, 8, 8]]])
     shape = tf.constant([4, 4, 4])
     scatter = tf.scatter_nd(indices, updates, shape)
     print(scatter)
 
เทนเซอร์ที่ได้จะมีลักษณะดังนี้:

[[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], [[5, 5, 5 , 5], [6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8]], [[0, 0, 0, 0], [0, 0 , 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], [[5, 5, 5, 5], [6, 6, 6, 6], [7 , 7, 7, 7], [8, 8, 8, 8]]]

โปรดทราบว่าบน CPU หากพบดัชนีนอกขอบเขต ข้อผิดพลาดจะถูกส่งกลับ บน GPU หากพบดัชนีนอกขอบเขต ดัชนีนั้นจะถูกละเว้น

วิธีการสาธารณะ

เอาท์พุต <U>
เป็นเอาท์พุต ()
ส่งกลับค่าแฮนเดิลสัญลักษณ์ของเทนเซอร์
คงที่ <U, T ขยาย Number> ScatterNd <U>
สร้าง (ขอบเขต ขอบเขต ดัชนีตัว ดำเนินการ <T> การอัปเดตตัว ดำเนินการ <U> รูปร่าง ตัวถูกดำเนินการ <T>)
วิธีการจากโรงงานเพื่อสร้างคลาสที่รวมการดำเนินการ ScatterNd ใหม่
เอาท์พุต <U>
เอาท์พุท ()
เทนเซอร์ใหม่ที่มีรูปร่างที่กำหนดและการอัปเดตที่ใช้ตามดัชนี

วิธีการสืบทอด

วิธีการสาธารณะ

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

ส่งกลับค่าแฮนเดิลสัญลักษณ์ของเทนเซอร์

อินพุตสำหรับการดำเนินการ TensorFlow คือเอาต์พุตของการดำเนินการ TensorFlow อื่น วิธีการนี้ใช้เพื่อรับหมายเลขอ้างอิงสัญลักษณ์ที่แสดงถึงการคำนวณอินพุต

การสร้าง ScatterNd <U> แบบคงที่สาธารณะ (ขอบเขต ขอบเขต , ดัชนี ตัวดำเนินการ <T>, การอัปเดตตัวดำเนิน การ <U>, รูปร่าง ตัวดำเนินการ <T>)

วิธีการจากโรงงานเพื่อสร้างคลาสที่รวมการดำเนินการ ScatterNd ใหม่

พารามิเตอร์
ขอบเขต ขอบเขตปัจจุบัน
ดัชนี เทนเซอร์ของดัชนี
อัปเดต ค่าที่จะกระจายเข้าไปในเทนเซอร์เอาท์พุต
รูปร่าง 1-D. รูปร่างของเอาท์พุตเทนเซอร์
การส่งคืน
  • ตัวอย่างใหม่ของ ScatterNd

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

เทนเซอร์ใหม่ที่มีรูปร่างที่กำหนดและการอัปเดตที่ใช้ตามดัชนี