เพิ่ม "การอัปเดต" แบบกระจัดกระจายให้กับเทนเซอร์ที่มีอยู่ตาม "ดัชนี"
การดำเนินการนี้จะสร้างเทนเซอร์ใหม่โดยเพิ่ม "การอัปเดต" แบบกระจัดกระจายให้กับค่าที่ส่งผ่านใน "เทนเซอร์" การดำเนินการนี้คล้ายกับ `tf.scatter_nd_add` มาก ยกเว้นว่าการอัปเดตจะถูกเพิ่มลงในเทนเซอร์ที่มีอยู่ (ซึ่งตรงข้ามกับตัวแปร) หากหน่วยความจำสำหรับเทนเซอร์ที่มีอยู่ไม่สามารถนำมาใช้ซ้ำได้ จะมีการทำสำเนาและอัปเดต
`indices` คือเทนเซอร์จำนวนเต็มที่มีดัชนีอยู่ในเทนเซอร์ใหม่ของรูปร่าง `tensor.shape` มิติสุดท้ายของ `ดัชนี` สามารถอยู่ในอันดับสูงสุดของ `tensor.shape`:
ดัชนีรูปร่าง[-1] <= tensor.shape.rank
มิติสุดท้ายของ `ดัชนี` สอดคล้องกับดัชนีในองค์ประกอบต่างๆ (หาก `indices.shape[-1] = tensor.shape.rank`) หรือชิ้น (หาก `indices.shape[-1] < tensor.shape.rank`) ตามมิติ `indices.shape[-1]` ของ `tensor.shape` `updates` เป็นเทนเซอร์ที่มีรูปร่าง
indices.shape[:-1] + tensor.shape[indices.shape[-1]:]
รูปแบบที่ง่ายที่สุดของ tensor_scatter_add คือการเพิ่มแต่ละองค์ประกอบให้กับเทนเซอร์ตามดัชนี ตัวอย่างเช่น สมมติว่าเราต้องการเพิ่ม 4 องค์ประกอบในเทนเซอร์อันดับ 1 โดยมี 8 องค์ประกอบ
ใน Python การดำเนินการเพิ่มแบบกระจายนี้จะมีลักษณะดังนี้:
indices = tf.constant([[4], [3], [1], [7]])
updates = tf.constant([9, 10, 11, 12])
tensor = tf.ones([8], dtype=tf.int32)
updated = tf.tensor_scatter_nd_add(tensor, indices, updates)
print(updated)
[1, 12, 1, 11, 10, 1, 1, 13]
นอกจากนี้เรายังสามารถแทรกส่วนของเทนเซอร์ลำดับที่สูงกว่าทั้งหมดได้ในคราวเดียว ตัวอย่างเช่น หากเราต้องการแทรกสองส่วนในมิติแรกของเทนเซอร์อันดับ 3 พร้อมด้วยเมทริกซ์ใหม่สองค่า
ใน Python การดำเนินการเพิ่มแบบกระจายนี้จะมีลักษณะดังนี้:
indices = tf.constant([[0], [2]])
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]]])
tensor = tf.ones([4, 4, 4],dtype=tf.int32)
updated = tf.tensor_scatter_nd_add(tensor, indices, updates)
print(updated)
[[[6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8], [9, 9, 9, 9]], [[1, 1, 1 , 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], [[6, 6, 6, 6], [7, 7 , 7, 7], [8, 8, 8, 8], [9, 9, 9, 9]], [[1, 1, 1, 1], [1, 1, 1, 1], [1 , 1, 1, 1], [1, 1, 1, 1]]]
โปรดทราบว่าบน CPU หากพบดัชนีนอกขอบเขต ข้อผิดพลาดจะถูกส่งกลับ บน GPU หากพบดัชนีนอกขอบเขต ดัชนีนั้นจะถูกละเว้น
ค่าคงที่
สตริง | OP_NAME | ชื่อของ op นี้ ซึ่งรู้จักกันในชื่อของเอ็นจิ้นหลัก TensorFlow |
วิธีการสาธารณะ
เอาท์พุต <T> | เป็นเอาท์พุต () ส่งกลับค่าแฮนเดิลสัญลักษณ์ของเทนเซอร์ |
คงที่ <T ขยาย TType > TensorScatterNdAdd <T> | |
เอาท์พุต <T> | เอาท์พุท () เทนเซอร์ใหม่คัดลอกมาจากเทนเซอร์และเพิ่มการอัปเดตตามดัชนี |
วิธีการสืบทอด
ค่าคงที่
สตริงสุดท้ายแบบคงที่สาธารณะ OP_NAME
ชื่อของ op นี้ ซึ่งรู้จักกันในชื่อของเอ็นจิ้นหลัก TensorFlow
วิธีการสาธารณะ
เอาท์พุท สาธารณะ <T> asOutput ()
ส่งกลับค่าแฮนเดิลสัญลักษณ์ของเทนเซอร์
อินพุตสำหรับการดำเนินการ TensorFlow คือเอาต์พุตของการดำเนินการ TensorFlow อื่น วิธีการนี้ใช้เพื่อรับหมายเลขอ้างอิงสัญลักษณ์ที่แสดงถึงการคำนวณอินพุต
สร้าง TensorScatterNdAdd <T> คงที่สาธารณะ (ขอบเขต ขอบเขต , ตัวดำเนิน การ <T> เทนเซอร์, ตัวดำเนินการ <? ขยาย TNumber > ดัชนี, ตัวดำเนิน การอัปเดต <T>)
วิธีการจากโรงงานเพื่อสร้างคลาสที่รวมการดำเนินการ TensorScatterNdAdd ใหม่
พารามิเตอร์
ขอบเขต | ขอบเขตปัจจุบัน |
---|---|
เทนเซอร์ | เทนเซอร์เพื่อคัดลอก/อัพเดต |
ดัชนี | ดัชนีเทนเซอร์ |
อัปเดต | อัปเดตเพื่อกระจายไปยังเอาต์พุต |
การส่งคืน
- อินสแตนซ์ใหม่ของ TensorScatterNdAdd