คำเตือน: API นี้เลิกใช้งานแล้วและจะถูกลบออกใน TensorFlow เวอร์ชันในอนาคตหลังจาก การแทนที่ เสถียรแล้ว

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.shape[-1] <= shape.rank

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

`อัปเดต' เป็นเมตริกซ์ที่มีรูปร่าง:

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

รูปแบบที่ง่ายที่สุดของ scatter 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 ขยายจำนวน> ScatterNd <U>
สร้าง ( ขอบเขต ขอบเขต, ดัชนี ตัวถูกดำเนินการ < T >, การอัปเดตตัวถูกดำเนินการ < U >, รูปร่างตัวถูกดำเนินการ <T>)
วิธีการ Factory เพื่อสร้างคลาสที่ปิดการดำเนินการ ScatterNd ใหม่
เอาท์พุต <U>
เอาท์พุท ()
เทนเซอร์ใหม่ที่มีรูปร่างที่กำหนดและการอัปเดตที่ใช้ตามดัชนี

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

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

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

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

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

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

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

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

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

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