פזרו `עדכונים` לטנזור חדש לפי `מדדים`.
יוצר טנזור חדש על ידי החלת 'עדכונים' דלילים על ערכים בודדים או פרוסות בתוך טנזור (בהתחלה אפס למספרי, ריק למחרוזת) של ה'צורה' הנתונה לפי מדדים. אופרטור זה הוא היפוך של האופרטור tf.gather_nd
אשר מחלץ ערכים או פרוסות מטנזור נתון.
פעולה זו דומה ל-tensor_scatter_add, אלא שהטנזור מאותחל באפס. קריאה ל- tf.scatter_nd(indices, values, shape)
זהה ל-'tensor_scatter_add(tf.zeros(shape, values.dtype), indices, values)'
אם 'מדדים' מכילים כפילויות, העדכונים שלהם מצטברים (מסוכמים).
אזהרה : סדר החלת העדכונים אינו דטרמיניסטי, ולכן הפלט יהיה לא דטרמיניסטי אם 'מדדים' מכיל כפילויות -- בגלל כמה בעיות קירוב מספרי, מספרים המסוכמים בסדר שונה עשויים להניב תוצאות שונות.
`מדדים` הוא טנסור שלם המכיל מדדים לתוך טנזור חדש של צורה `צורה`. הממד האחרון של 'מדדים' יכול להיות לכל היותר דרגת 'צורה':
indices.shape[-1] <= shape.rank
הממד האחרון של `מדדים` מתאים למדדים לתוך אלמנטים (אם `indices.shape[-1] = shape.rank`) או לפרוסות (אם `indices.shape[-1] < shape.rank`) לאורך הממד `מדדים` .shape[-1]` של `shape`. 'עדכונים' הוא טנסור עם צורה
indices.shape[:-1] + shape[indices.shape[-1]:]
הצורה הפשוטה ביותר של פיזור היא הכנסת אלמנטים בודדים בטנזור לפי אינדקס. לדוגמה, נניח שאנו רוצים להכניס 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([[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]]])
shape = tf.constant([4, 4, 4])
scatter = tf.scatter_nd(indices, updates, shape)
print(scatter)
הטנזור שיתקבל ייראה כך:[[[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]], [[0, 0, 0, 0], [0, 0, 0, 0], [0] , 0, 0, 0], [0, 0, 0, 0]]]
שימו לב שב-CPU, אם נמצא אינדקס מחוץ לתחום, מוחזרת שגיאה. ב-GPU, אם נמצא אינדקס מחוץ לתחום, מתעלמים מהאינדקס.
קבועים
חוּט | OP_NAME | השם של המבצע הזה, כפי שידוע על ידי מנוע הליבה של TensorFlow |
שיטות ציבוריות
פלט <U> | asOutput () מחזירה את הידית הסמלית של הטנזור. |
סטטי <U מרחיב את TType , T מרחיב את Tnumber > ScatterNd <U> | |
פלט <U> | פלט () טנזור חדש עם הצורה הנתונה ועדכונים מיושמים לפי המדדים. |
שיטות בירושה
קבועים
מחרוזת סופית סטטית ציבורית OP_NAME
השם של המבצע הזה, כפי שידוע על ידי מנוע הליבה של TensorFlow
שיטות ציבוריות
פלט ציבורי <U> asOutput ()
מחזירה את הידית הסמלית של הטנזור.
כניסות לפעולות TensorFlow הן יציאות של פעולת TensorFlow אחרת. שיטה זו משמשת להשגת ידית סמלית המייצגת את חישוב הקלט.
Public static ScatterNd <U> create ( היקף היקף , מדדי Operand <T>, עדכוני Operand <U>, צורת Operand <T>)
שיטת מפעל ליצירת מחלקה העוטפת פעולת ScatterNd חדשה.
פרמטרים
תְחוּם | ההיקף הנוכחי |
---|---|
מדדים | טנסור אינדקס. |
עדכונים | עדכונים לפיזור בפלט. |
צוּרָה | 1-D. צורת הטנזור שנוצר. |
מחזיר
- מופע חדש של ScatterNd