TensorScatter อัปเดต

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

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

การดำเนินการนี้จะสร้างเทนเซอร์ใหม่โดยใช้ "การอัปเดต" แบบเบาบางกับการส่งผ่านใน "เทนเซอร์" การดำเนินการนี้คล้ายกับ `tf.scatter_nd` มาก ยกเว้นว่าการอัปเดตจะกระจายไปยังเทนเซอร์ที่มีอยู่ (ตรงข้ามกับศูนย์เทนเซอร์) หากหน่วยความจำสำหรับเทนเซอร์ที่มีอยู่ไม่สามารถนำมาใช้ซ้ำได้ จะมีการทำสำเนาและอัปเดต

หาก `ดัชนี` มีรายการที่ซ้ำกัน การอัปเดตจะถูกสะสม (สรุป)

คำเตือน : ลำดับที่ใช้การอัปเดตนั้นไม่ได้กำหนดไว้ ดังนั้นเอาต์พุตจะไม่สามารถกำหนดได้หาก "ดัชนี" มีรายการที่ซ้ำกัน เนื่องจากปัญหาการประมาณตัวเลขบางประการ ตัวเลขที่สรุปในลำดับที่ต่างกันอาจให้ผลลัพธ์ที่แตกต่างกัน

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

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

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

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

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

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

>>> ดัชนี = tf.constant([[4], [3], [1], [7]]) >>> อัปเดต = tf.constant([9, 10, 11, 12]) >>> เทนเซอร์ = tf.ones ([8], dtype=tf.int32) >>> พิมพ์ (tf.tensor_scatter_nd_update (เทนเซอร์, ดัชนี, อัปเดต)) tf.Tensor ([ 1 11 1 10 9 1 1 12], รูปร่าง = (8 ,), dtype=int32)

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

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

>>> ดัชนี = tf.constant([[0], [2]]) >>> อัปเดต = 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]]]) >>> เทนเซอร์ = tf.ones([4, 4, 4], dtype=tf.int32) >>> พิมพ์ (tf.tensor_scatter_nd_update (เทนเซอร์, ดัชนี, อัปเดต). numpy ()) [[[5 5 5 5] [6 6 6 6] [7 7 7 7] [8 8 8 8]] [[1 1 1 1] [1 1 1 1] [1 1 1 1] [1 1 1 1]] [[5 5 5 5] [6 6 6 6] [7 7 7 7] [8 8 8 8]] [[1 1 1 1] [1 1 1 1] [1 1 1 1] [1 1 1 1]]]

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

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

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

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

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

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

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

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

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

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

พารามิเตอร์
ขอบเขต ขอบเขตปัจจุบัน
เทนเซอร์ เทนเซอร์เพื่อคัดลอก/อัพเดต
ดัชนี ดัชนีเทนเซอร์
อัปเดต อัปเดตเพื่อกระจายไปยังเอาต์พุต
การส่งคืน
  • อินสแตนซ์ใหม่ของ TensorScatterUpdate

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

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