«بهروزرسانیهای» پراکنده را با توجه به «شاخصها» از یک تانسور موجود کم میکند.
این عملیات با کم کردن «بهروزرسانیهای» پراکنده از «تانسور» یک تانسور جدید ایجاد میکند. این عملیات بسیار شبیه به «tf.scatter_nd_sub» است، با این تفاوت که بهروزرسانیها از یک تانسور موجود (برخلاف یک متغیر) کم میشوند. اگر حافظه تانسور موجود قابل استفاده مجدد نباشد، یک کپی ساخته شده و به روز می شود.
«شاخصها» یک تانسور عدد صحیح است که شامل شاخصهایی در یک تانسور جدید به شکل «شکل» است. آخرین بعد «شاخصها» حداکثر میتواند رتبه «شکل» باشد:
indices.shape[-1] <= shape.rank
آخرین بعد «شاخصها» مربوط به شاخصها در عناصر (اگر «indices.shape[-1] = shape.rank») یا برشها (اگر «indices.shape[-1] < shape.rank») در امتداد «شاخصها» است. شکل[-1]` از «شکل». "به روز رسانی" یک تانسور با شکل است
indices.shape[:-1] + shape[indices.shape[-1]:]
ساده ترین شکل tensor_scatter_sub این است که عناصر منفرد را از یک تانسور با شاخص کم کنیم. به عنوان مثال، فرض کنید می خواهیم 4 عنصر پراکنده را در یک تانسور رتبه-1 با 8 عنصر وارد کنیم.
در پایتون، این عمل تفریق پراکندگی به این صورت خواهد بود:
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_sub(tensor, indices, updates)
print(updated)
تانسور حاصل به این صورت خواهد بود:[1، -10، 1، -9، -8، 1، 1، -11]
همچنین میتوانیم تمام برشهای یک تانسور رتبه بالاتر را به یکباره وارد کنیم. به عنوان مثال، اگر بخواهیم دو برش را در بعد اول یک تانسور رتبه-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_sub(tensor, indices, updates)
print(updated)
تانسور حاصل به این صورت خواهد بود:[[[-4، -4، -4، -4]، [-5، -5، -5، -5]، [-6، -6، -6، -6]، [-7، -7 ، -7، -7]]، [[1، 1، 1، 1]، [1، 1، 1، 1]، [1، 1، 1، 1]، [1، 1، 1، 1]] ، [[-4، -4، -4، -4]، [-5، -5، -5، -5]، [-6، -6، -6، -6]، [-7، -7 ، -7، -7]]، [[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 > TensorScatterNdSub <T> را گسترش می دهد | |
خروجی <T> | خروجی () یک تانسور جدید کپی شده از تانسور و به روز رسانی ها با توجه به شاخص ها کم می شود. |
روش های ارثی
ثابت ها
رشته نهایی ثابت عمومی OP_NAME
نام این عملیات، همانطور که توسط موتور هسته TensorFlow شناخته می شود
روش های عمومی
خروجی عمومی <T> asOutput ()
دسته نمادین تانسور را برمی گرداند.
ورودی های عملیات TensorFlow خروجی های عملیات تنسورفلو دیگر هستند. این روش برای به دست آوردن یک دسته نمادین که نشان دهنده محاسبه ورودی است استفاده می شود.
عمومی ایستا TensorScatterNdSub <T> ایجاد ( scope scope، Operand <T> تانسور، Operand <? گسترش TNumber > شاخص ها، Operand <T> به روز رسانی)
روش کارخانه برای ایجاد کلاسی که یک عملیات TensorScatterNdSub جدید را بسته بندی می کند.
مولفه های
محدوده | محدوده فعلی |
---|---|
تانسور | تانسور برای کپی/به روز رسانی. |
شاخص ها | تانسور شاخص |
به روز رسانی | به روز رسانی برای پراکندگی در خروجی. |
برمی گرداند
- یک نمونه جدید از TensorScatterNdSub
خروجی عمومی <T> خروجی ()
یک تانسور جدید کپی شده از تانسور و به روز رسانی ها با توجه به شاخص ها کم می شود.