«بهروزرسانیها» را با توجه به «شاخصها» به یک تانسور شکل «شکل» پراکنده میکند.
«بهروزرسانیها» را با توجه به مقادیر فردی در «شاخصهای» مشخص شده پراکنده کنید. این عملیات یک تانسور خروجی را با «شکل» که شما مشخص کردهاید برمیگرداند. این عملیات معکوس عملگر tf.gather_nd
است که مقادیر یا برش ها را از یک تانسور معین استخراج می کند.
این عملیات مشابه tf.tensor_scatter_nd_add
است، با این تفاوت که تانسور صفر اولیه است. فراخوانی tf.scatter_nd(indices, updates, shape)
با فراخوانی «tf.tensor_scatter_nd_add(tf.zeros(شکل، updates.dtype)، شاخصها، بهروزرسانیها» یکسان است.
اگر «شاخصها» حاوی موارد تکراری باشد، «بهروزرسانیهای» مرتبط در تانسور خروجی جمع میشوند (جمع میشوند).
هشدار : برای انواع داده های ممیز شناور، خروجی ممکن است غیر قطعی باشد. این به این دلیل است که ترتیب اعمال بهروزرسانیها غیر قطعی است و وقتی اعداد ممیز شناور به ترتیبهای مختلف اضافه میشوند، خطای تقریب عددی حاصل میتواند کمی متفاوت باشد. با این حال، اگر op determinism از طریق tf.config.experimental.enable_op_determinism
فعال شود، خروجی قطعی خواهد بود.
«شاخصها» یک تانسور عدد صحیح است که شامل شاخصهایی در تانسور خروجی است. آخرین بعد «شاخصها» حداکثر میتواند رتبه «شکل» باشد:
indices.shape[-1] <= shape.rank
آخرین بعد «شاخصها» به شاخصهای عناصر (اگر «indice.shape[-1] = shape.rank») یا برشها (اگر «indices.shape[-1] < shape.rank») در امتداد ابعاد «شاخصها» مربوط میشود. شکل[-1]` از «شکل».
"به روز رسانی" یک تانسور با شکل است:
indices.shape[:-1] + shape[indices.shape[-1]:]
سادهترین شکل عملیات پراکندگی، درج عناصر منفرد در یک تانسور با شاخص است. مثالی را در نظر بگیرید که در آن میخواهید 4 عنصر پراکنده را در یک تانسور رتبه-1 با 8 عنصر وارد کنید.
در پایتون، این عمل پراکندگی به صورت زیر است:
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 با دو ماتریس از مقادیر جدید وارد کنید.
در پایتون، این عمل پراکندگی به صورت زیر است:
indices = tf.constant([[1], [3]])
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)
تانسور حاصل به صورت زیر خواهد بود:[[[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]]، [[5، 5، 5، 5]، [6، 6، 6، 6]، [7 ، 7، 7، 7]، [8، 8، 8، 8]]]
توجه داشته باشید که در CPU، اگر یک نمایه خارج از کران پیدا شود، یک خطا برگردانده می شود. در GPU، اگر یک نمایه خارج از کران پیدا شود، شاخص نادیده گرفته می شود.
روش های عمومی
خروجی <U> | asOutput () دسته نمادین یک تانسور را برمیگرداند. |
استاتیک <U، T تعداد را گسترش می دهد> ScatterNd <U> | |
خروجی <U> | خروجی () یک تانسور جدید با شکل داده شده و به روز رسانی های اعمال شده بر اساس شاخص ها. |
روش های ارثی
روش های عمومی
خروجی عمومی <U> asOutput ()
دسته نمادین یک تانسور را برمیگرداند.
ورودی های عملیات TensorFlow خروجی های عملیات تنسورفلو دیگر هستند. این روش برای به دست آوردن یک دسته نمادین که نشان دهنده محاسبه ورودی است استفاده می شود.
ایجاد ScatterNd ایستا عمومی (حوزه دامنه ، شاخص های عملوند <T>، به روز رسانی های عملوند <U>، شکل عملوند <T>)
روش کارخانه برای ایجاد کلاسی که یک عملیات ScatterNd جدید را بسته بندی می کند.
پارامترها
دامنه | محدوده فعلی |
---|---|
شاخص ها | تانسور شاخص ها |
به روز رسانی ها | مقادیر برای پراکندگی در تانسور خروجی. |
شکل | 1-D. شکل تانسور خروجی |
برمی گرداند
- یک نمونه جدید از ScatterNd
خروجی عمومی <U> خروجی ()
یک تانسور جدید با شکل داده شده و به روز رسانی های اعمال شده بر اساس شاخص ها.