'সূচক' অনুযায়ী বিদ্যমান টেনসর থেকে স্পার্স `আপডেট` বিয়োগ করে।
এই ক্রিয়াকলাপটি 'টেনসর'-এ পাস করা স্পার্স 'আপডেট' থেকে বিয়োগ করে একটি নতুন টেনসর তৈরি করে। এই ক্রিয়াকলাপটি `tf.scatter_nd_sub`-এর সাথে খুব মিল, ব্যতীত যে আপডেটগুলি একটি বিদ্যমান টেনসর থেকে বিয়োগ করা হয় (একটি পরিবর্তনশীলের বিপরীতে)। যদি বিদ্যমান টেনসরের মেমরিটি পুনরায় ব্যবহার করা না যায় তবে একটি অনুলিপি তৈরি এবং আপডেট করা হয়।
`সূচক` হল একটি পূর্ণসংখ্যার টেনসর যাতে সূচকগুলিকে আকৃতির একটি নতুন টেনসর `আকৃতি`তে পরিণত করে। `সূচক` এর শেষ মাত্রা সর্বাধিক `আকৃতি` র্যাঙ্ক হতে পারে:
indices.shape[-1] <= shape.rank
`সূচক` এর শেষ মাত্রা উপাদানগুলির মধ্যে সূচকের সাথে মিলে যায় (যদি `indices.shape[-1] = shape.rank`) অথবা স্লাইস (যদি `indices.shape[-1] < shape.rank`) মাত্রা `সূচকের সাথে .shape[-1]` of `shape`। `আপডেট` হল আকৃতি সহ একটি টেনসর
indices.shape[:-1] + shape[indices.shape[-1]:]
tensor_scatter_sub-এর সহজতম রূপ হল সূচক দ্বারা একটি টেনসর থেকে পৃথক উপাদান বিয়োগ করা। উদাহরণস্বরূপ, বলুন আমরা 8টি উপাদান সহ একটি র্যাঙ্ক-1 টেনসরে 4টি বিক্ষিপ্ত উপাদান সন্নিবেশ করতে চাই।
পাইথনে, এই স্ক্যাটার বিয়োগ ক্রিয়াটি এইরকম দেখাবে:
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 | এই অপের নাম, টেনসরফ্লো কোর ইঞ্জিন দ্বারা পরিচিত |
পাবলিক পদ্ধতি
আউটপুট <T> | আউটপুট হিসাবে () টেনসরের প্রতীকী হ্যান্ডেল ফেরত দেয়। |
স্ট্যাটিক <T TType প্রসারিত করে > TensorScatterNdSub <T> | |
আউটপুট <T> | আউটপুট () একটি নতুন টেনসর টেনসর থেকে অনুলিপি করা হয়েছে এবং সূচক অনুসারে বিয়োগ করা আপডেটগুলি। |
উত্তরাধিকারসূত্রে প্রাপ্ত পদ্ধতি
ধ্রুবক
সর্বজনীন স্ট্যাটিক চূড়ান্ত স্ট্রিং OP_NAME
এই অপের নাম, টেনসরফ্লো কোর ইঞ্জিন দ্বারা পরিচিত
পাবলিক পদ্ধতি
সর্বজনীন আউটপুট <T> হিসাবে আউটপুট ()
টেনসরের প্রতীকী হ্যান্ডেল ফেরত দেয়।
TensorFlow অপারেশনের ইনপুট হল অন্য TensorFlow অপারেশনের আউটপুট। এই পদ্ধতিটি একটি প্রতীকী হ্যান্ডেল পেতে ব্যবহৃত হয় যা ইনপুটের গণনাকে প্রতিনিধিত্ব করে।
পাবলিক স্ট্যাটিক TensorScatterNdSub <T> তৈরি করুন ( স্কোপ স্কোপ, অপারেন্ড <T> টেনসর, অপারেন্ড <? TNumber > সূচক, অপারেন্ড <T> আপডেটগুলি প্রসারিত করে)
একটি নতুন TensorScatterNdSub অপারেশন মোড়ানো একটি ক্লাস তৈরি করার কারখানার পদ্ধতি৷
পরামিতি
সুযোগ | বর্তমান সুযোগ |
---|---|
টেনসর | কপি/আপডেট করার জন্য টেনসর। |
সূচক | সূচক টেনসর। |
আপডেট | আউটপুট মধ্যে ছড়িয়ে ছিটিয়ে আপডেট. |
রিটার্নস
- TensorScatterNdSub-এর একটি নতুন উদাহরণ
সর্বজনীন আউটপুট <T> আউটপুট ()
একটি নতুন টেনসর টেনসর থেকে অনুলিপি করা হয়েছে এবং সূচক অনুসারে বিয়োগ করা আপডেটগুলি।