«بهروزرسانیهای» پراکنده را به یک تانسور موجود با توجه به «شاخصها» اضافه میکند.
این عملیات با افزودن «بهروزرسانیهای» پراکنده به «تانسور»، یک تانسور جدید ایجاد میکند. این عملیات بسیار شبیه به «tf.scatter_nd_add» است، با این تفاوت که بهروزرسانیها به یک تانسور موجود (برخلاف یک متغیر) اضافه میشوند. اگر حافظه تانسور موجود قابل استفاده مجدد نباشد، یک کپی ساخته شده و به روز می شود.
«شاخصها» یک تانسور عدد صحیح است که شامل شاخصهایی در یک تانسور جدید به شکل «tensor.shape» است. آخرین بعد «شاخصها» حداکثر میتواند رتبه «شکل تنسور» باشد:
indices.shape[-1] <= tensor.shape.rank
آخرین بعد «شاخصها» مربوط به شاخصها در عناصر (اگر «indices.shape[-1] = tensor.shape.rank») یا برشها (اگر «indices.shape[-1] < tensor.shape.rank») در امتداد بعد «شاخصهای شکل[-1]» «شکل تنسور». "به روز رسانی" یک تانسور با شکل است
indices.shape[:-1] + tensor.shape[indices.shape[-1]:]
ساده ترین شکل tensor_scatter_add اضافه کردن عناصر جداگانه به یک تانسور با شاخص است. به عنوان مثال، فرض کنید می خواهیم 4 عنصر را با 8 عنصر در یک تانسور رتبه-1 اضافه کنیم.
در پایتون، این عملیات افزودن پراکنده به این صورت خواهد بود:
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 با دو ماتریس از مقادیر جدید وارد کنیم.
در پایتون، این عملیات افزودن پراکنده به این صورت خواهد بود:
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 | نام این عملیات، همانطور که توسط موتور هسته TensorFlow شناخته می شود |
روش های عمومی
خروجی <T> | asOutput () دسته نمادین تانسور را برمی گرداند. |
static <T TType > TensorScatterNdAdd <T> را گسترش می دهد | |
خروجی <T> | خروجی () یک تانسور جدید کپی شده از تانسور و بهروزرسانیهایی که بر اساس شاخصها اضافه شده است. |
روش های ارثی
ثابت ها
رشته نهایی ثابت عمومی OP_NAME
نام این عملیات، همانطور که توسط موتور هسته TensorFlow شناخته می شود
روش های عمومی
خروجی عمومی <T> asOutput ()
دسته نمادین تانسور را برمی گرداند.
ورودی های عملیات TensorFlow خروجی های عملیات تنسورفلو دیگر هستند. این روش برای به دست آوردن یک دسته نمادین که نشان دهنده محاسبه ورودی است استفاده می شود.
عمومی ایستا TensorScatterNdAdd <T> ایجاد ( دامنه دامنه ، عملوند <T> تانسور، عملوند <? گسترش TNumber > شاخص ها، عملوند <T> به روز رسانی)
روش کارخانه برای ایجاد کلاسی که یک عملیات TensorScatterNdAdd جدید را بسته بندی می کند.
مولفه های
محدوده | محدوده فعلی |
---|---|
تانسور | تانسور برای کپی/به روز رسانی. |
شاخص ها | تانسور شاخص |
به روز رسانی ها | به روز رسانی برای پراکندگی در خروجی. |
برمی گرداند
- یک نمونه جدید از TensorScatterNdAdd
خروجی عمومی <T> خروجی ()
یک تانسور جدید کپی شده از تانسور و بهروزرسانیهایی که بر اساس شاخصها اضافه شده است.