StridedSlice

الطبقة النهائية العامة StridedSlice

قم بإرجاع شريحة ممتدة من "الإدخال".

لاحظ أن معظم مستخدمي بايثون سيرغبون في استخدام Python Tensor.__getitem__ أو Variable.__getitem__ بدلاً من هذه العملية مباشرة.

الهدف من هذه العملية هو إنتاج موتر جديد مع مجموعة فرعية من العناصر من موتر الإدخال ذو الأبعاد المتعددة. يتم اختيار المجموعة الفرعية باستخدام سلسلة من مواصفات النطاق المتناثر `m` المشفرة في وسائط هذه الوظيفة. لاحظ أنه في بعض الحالات يمكن أن يكون `m` مساويًا لـ `n`، ولكن ليس من الضروري أن يكون هذا هو الحال. يمكن أن يكون كل إدخال لمواصفات النطاق واحدًا مما يلي:

- علامة الحذف (...). تُستخدم علامات الحذف للإشارة إلى صفر أو أكثر من أبعاد تحديد البعد الكامل، ويتم إنتاجها باستخدام "قناع القطع الناقص". على سبيل المثال، `foo[...]` هي شريحة الهوية.

- محور جديد. يُستخدم هذا لإدراج شكل جديد=بعد واحد ويتم إنتاجه باستخدام "قناع_المحور_الجديد". على سبيل المثال، `foo[:, ...]` حيث `foo` هو الشكل `(3, 4)` ينتج موتر `(1, 3, 4)`.

- نطاق "البداية: النهاية: الخطوة". يُستخدم هذا لتحديد مقدار الاختيار من بُعد معين. يمكن أن تكون "الخطوة" أي عدد صحيح باستثناء 0. "البدء" هو عدد صحيح يمثل فهرس القيمة الأولى المراد تحديدها بينما يمثل "النهاية" فهرس القيمة الأخيرة المطلوب تحديدها. عدد القيم المحددة في كل بُعد هو `النهاية - البداية` إذا كانت `الخطوة > 0` و`البداية - النهاية` إذا كانت `الخطوة < 0`. يمكن أن تكون `begin` و`end` سالبة حيث `-1` هو العنصر الأخير، و`-2` هو العنصر الثاني قبل الأخير. يتحكم `begin_mask` فيما إذا كان سيتم استبدال `begin` المعطاة بشكل صريح بقيمة فعالة ضمنية تبلغ `0` إذا `stride > 0` و`-1` إذا `stride < 0`. يعد `end_mask` مشابهًا ولكنه ينتج الرقم المطلوب لإنشاء أكبر فاصل زمني مفتوح. على سبيل المثال، بالنظر إلى الشكل `(3,)` الموتر `foo[:]`، فإن `البداية` و`النهاية` الفعالتين هما `0` و`3`. لا تفترض أن هذا يعادل `foo[0:-1]` الذي له `بداية` و`نهاية` فعالة لـ `0` و`2`. مثال آخر هو `foo[-2::-1]` الذي يعكس البعد الأول للموتر بينما يسقط البعدين الأخيرين (في عناصر الترتيب الأصلي). على سبيل المثال `foo = [1,2,3,4]; foo[-2::-1]` هو `[4,3]`.

- فهرس واحد. يُستخدم هذا للاحتفاظ فقط بالعناصر التي تحتوي على فهرس معين. على سبيل المثال (`foo[2, :]` على شكل `(5,6)` يُنتج الموتر شكلًا `(6,)`. يتم ترميز هذا في `begin` و`end` و`shrink_axis_mask`.

يتم ترميز كل مواصفات النطاق المفاهيمي في وسيطة المرجع. من الأفضل فهم هذا الترميز من خلال النظر في مثال غير تافه. على وجه الخصوص، سيتم ترميز `foo[1, 2:4, None, ..., :-3:-1, :]` كـ

begin = [1, 2, x, x, 0, x] # x denotes don't care (usually 0)
 end = [2, 4, x, x, -3, x]
 strides = [1, 1, x, x, -1, 1]
 begin_mask = 1&lt;&lt;4 | 1&lt;&lt;5 = 48
 end_mask = 1&lt;&lt;5 = 32
 ellipsis_mask = 1&lt;&lt;3 = 8
 new_axis_mask = 1&lt;&lt;2 = 4
 shrink_axis_mask = 1&lt;&lt;0 = 1
 
في هذه الحالة إذا كان `foo.shape` هو (5, 5, 5، 5، 5، 5) فيصبح الشكل النهائي للشريحة (2، 1، 5، 5، 2، 5). دعونا نسير خطوة بخطوة خلال مواصفات كل وسيطة.

1. تم تحويل الوسيطة الأولى في شريحة المثال إلى `begin = 1` و`end = begin + 1 = 2`. لتوضيح المواصفات الأصلية `2:4`، قمنا أيضًا بتعيين البت المناسب في `shrink_axis_mask`.

2. `2:4` يساهم بـ 2، 4، 1 في البداية والنهاية والخطوة. جميع الأقنعة لا تحتوي على أي بتات.

3. لا شيء مرادف لـ tf.newaxis . وهذا يعني إدراج بُعد بحجم 1 في الشكل النهائي. يتم المساهمة بالقيم الوهمية للبدء والنهاية والخطوة، بينما يتم تعيين بت new_axis_mask.

4. `...` احصل على النطاقات الكاملة من أكبر عدد ممكن من الأبعاد لتحديد شريحة بشكل كامل لكل بُعد من شكل الإدخال.

5. `:-3:-1` يوضح استخدام المؤشرات السلبية. يتم تحويل الفهرس السالب `i` المرتبط بالبعد الذي له شكل `s` إلى فهرس موجب `s + i`. لذلك يصبح `-1` `s-1` (أي العنصر الأخير). يتم إجراء هذا التحويل داخليًا، لذا فإن البداية والنهاية والخطوات تتلقى x و-3 و-1. يتم تعيين بت begin_mask المناسب للإشارة إلى أن نطاق البداية هو النطاق الكامل (تجاهل x).

6. `:` يشير إلى أنه تم تحديد محتويات البعد المقابل بالكامل. وهذا يعادل `::` أو `0::1`. البداية والنهاية والخطوات تتلقى 0 و0 و1 على التوالي. يتم أيضًا تعيين البتات المناسبة في `begin_mask` و`end_mask`.

المتطلبات : `0 != خطوات[i] لـ i في [0, m)` `يجب أن يكون قناع القطع الناقص قوة اثنين (علامة حذف واحدة فقط)`

فئات متداخلة

فصل StrideSlice.Options السمات الاختيارية لـ StridedSlice

الأساليب العامة

الإخراج <T>
كإخراج ()
إرجاع المقبض الرمزي للموتر.
StridedSlice.Options ثابت
قناع البداية (قناع البداية الطويل)
ثابت <T، U يمتد الرقم> StridedSlice <T>
إنشاء (نطاق النطاق ، إدخال المعامل <T>، بدء المعامل <U>، نهاية المعامل <U>، خطوات المعامل <U>، خيارات... خيارات)
طريقة المصنع لإنشاء فئة تغلف عملية StridedSlice جديدة.
StridedSlice.Options ثابت
قناع القطع (قناع القطع الطويل)
StridedSlice.Options ثابت
قناع النهاية (قناع النهاية الطويل)
StridedSlice.Options ثابت
newAxisMask (قناع جديد طويل)
الإخراج <T>
StridedSlice.Options ثابت
تقليص أكسيس ماسك (تقليص أكسيس ماسك طويل)

الطرق الموروثة

الأساليب العامة

الإخراج العام <T> كإخراج ()

إرجاع المقبض الرمزي للموتر.

المدخلات إلى عمليات TensorFlow هي مخرجات عملية TensorFlow أخرى. يتم استخدام هذه الطريقة للحصول على مقبض رمزي يمثل حساب الإدخال.

StridedSlice.Options beginMask الثابت العام (Long beginMask)

حدود
beginMask قناع نقطي حيث يكون الرقم 1 يعني تجاهل قيمة البداية واستخدام أكبر فاصل زمني ممكن بدلاً من ذلك. في وقت التشغيل، سيتم استبدال start[i] بـ `[0, n-1)` إذا `stride[i] > 0` أو `[-1, n-1]` إذا `stride[i] < 0`

إنشاء StridedSlice <T> ثابت عام ( نطاق النطاق ، إدخال المعامل <T>، بدء المعامل <U>، نهاية المعامل <U>، خطوات المعامل <U>، خيارات... خيارات)

طريقة المصنع لإنشاء فئة تغلف عملية StridedSlice جديدة.

حدود
نِطَاق النطاق الحالي
يبدأ `begin[k]` يحدد الإزاحة في مواصفات النطاق `k`. سيتم تحديد البعد الدقيق الذي يتوافق معه حسب السياق. سيتم تثبيت القيم خارج الحدود بصمت. إذا تم تجاهل البتة k من `begin_mask`، فسيتم استخدام النطاق الكامل للبعد المناسب بدلاً من ذلك. تؤدي القيم السالبة إلى بدء الفهرسة من أعلى عنصر، على سبيل المثال إذا كان `foo==[1,2,3]` ثم `foo[-1]==3`.
نهاية `end[i]` يشبه `begin` باستثناء أنه يتم استخدام `end_mask` لتحديد النطاقات الكاملة.
خطوات واسعة `خطوات[i]` تحدد الزيادة في المواصفات `i` بعد استخراج عنصر معين. المؤشرات السلبية ستعكس الترتيب الأصلي. يتم تثبيت قيم النطاق أو النطاق على `[0,dim[i]) إذا كانت الشريحة[i]>0` أو `[-1,dim[i]-1] إذا كانت الشريحة[i] < 0`
خيارات يحمل قيم السمات الاختيارية
عائدات
  • مثيل جديد من StridedSlice

StridedSlice.Options ellipsisMask الثابت العام (قناع القطع الطويل)

حدود
ellipsisMask قناع نقطي حيث تكون البتة `i` 1 تعني أن الموضع `i` هو في الواقع علامة حذف. بت واحد على الأكثر يمكن أن يكون 1. إذا كان `ellipsis_mask == 0`، فسيتم توفير قناع القطع الضمني `1 << (m+1)`. وهذا يعني أن `foo[3:5] == foo[3:5, ...]`. تقوم علامة الحذف ضمنيًا بإنشاء العديد من مواصفات النطاق حسب الضرورة لتحديد نطاق الشرائح بشكل كامل لكل بُعد. على سبيل المثال، بالنسبة للموتر رباعي الأبعاد `foo`، فإن الشريحة `foo[2, ..., 5:8]` تعني ضمنًا `foo[2, :, :, 5:8]`.

StridedSlice.Options endMask العام الثابت (Long endMask)

حدود
endMask مشابه لـ "start_mask".

StridedSlice.Options العام الثابت newAxisMask (newAxisMask الطويل)

حدود
newAxisMask قناع نقطي حيث تكون البتة `i` 1 تعني أن المواصفات `i` تنشئ بُعدًا جديدًا للشكل 1. على سبيل المثال، `foo[:4, tf.newaxis, :2]` سينتج موترًا على شكل `(4, 1, 2)`.

الإخراج العام <T> الإخراج ()

StridedSlice.Options ثابت عام وتقليصAxisMask (ShrinkAxisMask طويل)

حدود
يتقلصAxisMask قناع نقطي حيث تشير البتة `i` إلى أن المواصفات `i` يجب أن تقلص الأبعاد. يجب أن تتضمن البداية والنهاية شريحة بحجم 1 في البعد. على سبيل المثال في لغة بايثون، يمكن للمرء أن يفعل `foo[:, 3, :]` مما قد يؤدي إلى أن يكون `shrink_axis_mask` 2.