تحديث TensorScatter

الطبقة النهائية العامة TensorScatterUpdate

قم بتوزيع "التحديثات" في موتر موجود وفقًا لـ "المؤشرات".

تنشئ هذه العملية موترًا جديدًا عن طريق تطبيق "تحديثات" متفرقة على "الموتر" الذي تم تمريره. هذه العملية تشبه إلى حد كبير `tf.scatter_nd`، باستثناء أن التحديثات متناثرة على موتر موجود (على عكس الموتر الصفري). إذا لم يكن من الممكن إعادة استخدام ذاكرة الموتر الموجود، فسيتم عمل نسخة وتحديثها.

إذا كانت "الفهارس" تحتوي على نسخ مكررة، فسيتم تجميع (جمع) تحديثاتها.

تحذير : الترتيب الذي يتم به تطبيق التحديثات غير حتمي، وبالتالي فإن الإخراج سيكون غير حتمي إذا كانت "المؤشرات" تحتوي على نسخ مكررة - بسبب بعض مشكلات التقريب الرقمي، قد تؤدي الأرقام المجمعة بترتيب مختلف إلى نتائج مختلفة.

"المؤشرات" عبارة عن موتر عدد صحيح يحتوي على مؤشرات في موتر جديد للشكل "الشكل". البعد الأخير من "المؤشرات" يمكن أن يكون على الأكثر رتبة "الشكل":

indices.shape[-1] <= Shape.rank

البعد الأخير من "المؤشرات" يتوافق مع المؤشرات في عناصر (إذا كانت "indices.shape[-1] = Shape.rank") أو شرائح (إذا كانت "indices.shape[-1] < Shape.rank") على طول البعد "indices" .shape[-1]` من `الشكل`. "التحديثات" عبارة عن موتر ذو شكل

indices.shape[:-1] + شكل[indices.shape[-1]:]

أبسط شكل من أشكال التشتت هو إدراج عناصر فردية في موتر حسب الفهرس. على سبيل المثال، لنفترض أننا نريد إدراج 4 عناصر متناثرة في موتر من الرتبة 1 يحتوي على 8 عناصر.

في بايثون، تبدو عملية التشتت هذه كما يلي:

>>> المؤشرات = tf.constant([[4], [3], [1], [7]]) >>> التحديثات = tf.constant([9, 10, 11, 12]) >>> الموتر = tf.ones([8], dtype=tf.int32) >>> print(tf.tensor_scatter_nd_update(tensor, indices, Update)) tf.Tensor([ 1 11 1 10 9 1 1 12], الشكل=(8) ،) dtype=int32)

يمكننا أيضًا إدراج شرائح كاملة من موتر ذو رتبة أعلى مرة واحدة. على سبيل المثال، إذا أردنا إدراج شريحتين في البعد الأول لموتر من الرتبة 3 مع مصفوفتين من القيم الجديدة.

في بايثون، تبدو عملية التشتت هذه كما يلي:

>>> المؤشرات = 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]]]) >>> Tensor = tf.ones([4, 4, 4], dtype=tf.int32) >>> print (tf.tensor_scatter_nd_update(tensor, indices, Updates).numpy()) [[[5 5 5 5] [6 6 6 6] [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]]]

لاحظ أنه على وحدة المعالجة المركزية، إذا تم العثور على فهرس خارج النطاق، فسيتم إرجاع خطأ. في وحدة معالجة الرسومات، إذا تم العثور على فهرس خارج النطاق، فسيتم تجاهل الفهرس.

الأساليب العامة

الإخراج <T>
كإخراج ()
إرجاع المقبض الرمزي للموتر.
ثابت <T، U يمتد الرقم> TensorScatterUpdate <T>
إنشاء (نطاق النطاق ، موتر المعامل <T>، مؤشرات المعامل <U>، تحديثات المعامل <T>)
طريقة المصنع لإنشاء فئة تغلف عملية TensorScatterUpdate جديدة.
الإخراج <T>
انتاج ()
موتر جديد بالشكل المحدد والتحديثات المطبقة وفقًا للمؤشرات.

الطرق الموروثة

الأساليب العامة

الإخراج العام <T> كإخراج ()

إرجاع المقبض الرمزي للموتر.

المدخلات إلى عمليات TensorFlow هي مخرجات عملية TensorFlow أخرى. يتم استخدام هذه الطريقة للحصول على مقبض رمزي يمثل حساب الإدخال.

إنشاء TensorScatterUpdate <T> الثابت العام ( نطاق النطاق ، موتر المعامل <T>، مؤشرات المعامل <U>، تحديثات المعامل <T>)

طريقة المصنع لإنشاء فئة تغلف عملية TensorScatterUpdate جديدة.

حدود
نِطَاق النطاق الحالي
الموتر الموتر للنسخ/التحديث.
المؤشرات مؤشر الموتر.
التحديثات التحديثات لتنتشر في الإخراج.
عائدات
  • مثيل جديد لـ TensorScatterUpdate

الإخراج العام <T> الإخراج ()

موتر جديد بالشكل المحدد والتحديثات المطبقة وفقًا للمؤشرات.