«بهروزرسانیهای» پراکنده را با توجه به «شاخصها» از یک تانسور موجود کم میکند.
این عملیات با کم کردن «بهروزرسانیهای» پراکنده از «تانسور» یک تانسور جدید ایجاد میکند. این عملیات بسیار شبیه به «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، اگر یک نمایه خارج از کران پیدا شود، شاخص نادیده گرفته می شود.
روش های عمومی
خروجی <T> | asOutput () دسته نمادین یک تانسور را برمیگرداند. |
ایستا <T، U گسترش شماره> TensorScatterSub <T> | |
خروجی <T> | خروجی () یک تانسور جدید کپی شده از تانسور و به روز رسانی ها با توجه به شاخص ها کم می شود. |
روش های ارثی
روش های عمومی
خروجی عمومی <T> asOutput ()
دسته نمادین یک تانسور را برمیگرداند.
ورودی های عملیات TensorFlow خروجی های عملیات تنسورفلو دیگر هستند. این روش برای به دست آوردن یک دسته نمادین که نشان دهنده محاسبه ورودی است استفاده می شود.
عمومی ایستا TensorScatterSub <T> ایجاد ( دامنه دامنه ، تانسور عملوند <T>، شاخص های عملوند <U>، به روز رسانی های عملوند <T>)
روش کارخانه برای ایجاد کلاسی که یک عملیات TensorScatterSub جدید را بسته بندی می کند.
مولفه های
محدوده | محدوده فعلی |
---|---|
تانسور | تانسور برای کپی/به روز رسانی. |
شاخص ها | تانسور شاخص |
به روز رسانی ها | به روز رسانی برای پراکندگی در خروجی. |
برمی گرداند
- یک نمونه جدید از TensorScatterSub
خروجی عمومی <T> خروجی ()
یک تانسور جدید کپی شده از تانسور و به روز رسانی ها با توجه به شاخص ها کم می شود.