«بهروزرسانیها» را با توجه به «شاخصها» در یک تانسور موجود پراکنده کنید.
این عملیات با اعمال «بهروزرسانیهای» پراکنده در «تانسور» یک تانسور جدید ایجاد میکند. این عملیات بسیار شبیه به «tf.scatter_nd» است، با این تفاوت که بهروزرسانیها روی یک تانسور موجود پراکنده میشوند (برخلاف تانسور صفر). اگر حافظه تانسور موجود قابل استفاده مجدد نباشد، یک کپی ساخته شده و به روز می شود.
اگر «شاخصها» دارای موارد تکراری باشد، بهروزرسانیهای آنها انباشته میشوند (جمع میشوند).
اخطار : ترتیب اعمال بهروزرسانیها غیر قطعی است، بنابراین اگر «شاخصها» دارای موارد تکراری باشند، خروجی غیر قطعی خواهد بود - به دلیل برخی مسائل تقریب عددی، اعدادی که به ترتیب متفاوت جمعبندی میشوند ممکن است نتایج متفاوتی به همراه داشته باشند.
«شاخصها» یک تانسور عدد صحیح است که شامل شاخصهایی در یک تانسور جدید به شکل «شکل» است. آخرین بعد «شاخصها» حداکثر میتواند رتبه «شکل» باشد:
indices.shape[-1] <= shape.rank
آخرین بعد «شاخصها» مربوط به شاخصها در عناصر (اگر «indices.shape[-1] = shape.rank») یا برشها (اگر «indices.shape[-1] < shape.rank») در امتداد «شاخصها» است. شکل[-1]` از «شکل». "به روز رسانی" یک تانسور با شکل است
indices.shape[:-1] + shape[indices.shape[-1]:]
ساده ترین شکل پراکندگی این است که عناصر منفرد را با شاخص در یک تانسور وارد کنید. به عنوان مثال، فرض کنید می خواهیم 4 عنصر پراکنده را در یک تانسور رتبه-1 با 8 عنصر وارد کنیم.
در پایتون، این عمل پراکندگی به صورت زیر است:
>>> شاخص = tf.constant([[4]، [3]، [1]، [7]]) >>> به روز رسانی = tf.constant([9, 10, 11, 12]) >>> تانسور = tf.ones([8]، dtype=tf.int32) >>> print(tf.tensor_scatter_nd_update(tensor، شاخص ها، به روز رسانی ها)) tf.Tensor([ 1 11 1 10 9 1 1 12], shape=(8 ,)، dtype=int32)
همچنین میتوانیم تمام برشهای یک تانسور رتبه بالاتر را به یکباره وارد کنیم. به عنوان مثال، اگر بخواهیم دو برش را در بعد اول یک تانسور رتبه-3 با دو ماتریس از مقادیر جدید وارد کنیم.
در پایتون، این عمل پراکندگی به صورت زیر است:
>>> شاخص = tf.constant([[0]، [2]]) >>> به روز رسانی = 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]]]) >>> تانسور = tf.ones([4, 4, 4], dtype=tf.int32) >>> چاپ (tf.tensor_scatter_nd_update(تانسور، شاخصها، بهروزرسانیها). numpy()) [[[5 5 55] [6 6 6 6] [7 7 7 7] [8 8 8 8]] [[1 1 1 1] [1 1 1 1] [1 1 1 1] [1 1 1 1]] [[5 5 5 5] [6 6 6 6] [7 7 7 7] [8 8 8 8]] [[1 1 1] 1] [1 1 1 1] [1 1 1 1] [1 1 1 1]]]
توجه داشته باشید که در CPU، اگر یک نمایه خارج از کران پیدا شود، یک خطا برگردانده می شود. در GPU، اگر یک نمایه خارج از کران پیدا شود، شاخص نادیده گرفته می شود.
روش های عمومی
خروجی <T> | asOutput () دسته نمادین یک تانسور را برمیگرداند. |
استاتیک <T، U گسترش شماره> TensorScatterUpdate <T> | |
خروجی <T> | خروجی () یک تانسور جدید با شکل داده شده و به روز رسانی های اعمال شده بر اساس شاخص ها. |
روش های ارثی
روش های عمومی
خروجی عمومی <T> asOutput ()
دسته نمادین یک تانسور را برمیگرداند.
ورودی های عملیات TensorFlow خروجی های عملیات تنسورفلو دیگر هستند. این روش برای به دست آوردن یک دسته نمادین که نشان دهنده محاسبه ورودی است استفاده می شود.
عمومی استاتیک TensorScatterUpdate <T> ایجاد ( دامنه دامنه ، تانسور عملوند <T>، شاخص های عملوند <U>، به روز رسانی های عملوند <T>)
روش کارخانه برای ایجاد کلاسی که یک عملیات جدید TensorScatterUpdate را بسته بندی می کند.
مولفه های
محدوده | محدوده فعلی |
---|---|
تانسور | تانسور برای کپی/به روز رسانی. |
شاخص ها | تانسور شاخص |
به روز رسانی ها | به روز رسانی برای پراکندگی در خروجی. |
برمی گرداند
- یک نمونه جدید از TensorScatterUpdate
خروجی عمومی <T> خروجی ()
یک تانسور جدید با شکل داده شده و به روز رسانی های اعمال شده بر اساس شاخص ها.