tensorflow:: אופס:: DepthToSpace

#include <array_ops.h>

DepthToSpace עבור טנסורים מסוג T.

תַקצִיר

מסדר מחדש נתונים מעומק לבלוקים של נתונים מרחביים. זהו הטרנספורמציה ההפוכה של SpaceToDepth. ליתר דיוק, אופציה זו מפיקה עותק של טנסור הקלט שבו ערכים מממד depth מועברים בלוקים מרחביים למימדי height width . ה-attr block_size מציין את גודל בלוק הקלט ואת אופן העברת הנתונים.

  • נתחי נתונים בגודל block_size * block_size מעומק מסודרים מחדש לבלוקים שאינם חופפים בגודל block_size x block_size
  • הרוחב של טנסור הפלט הוא input_depth * block_size , בעוד שהגובה הוא input_height * block_size .
  • קואורדינטות Y, X בתוך כל בלוק של תמונת הפלט נקבעות על ידי רכיב הסדר הגבוה של אינדקס ערוץ הקלט.
  • עומק טנזור הקלט חייב להיות מתחלק ב- block_size * block_size .

ה- data_format attr מציין את הפריסה של טנסור הקלט והפלט עם האפשרויות הבאות: "NHWC": [ batch, height, width, channels ] "NCHW": [ batch, channels, height, width ] "NCHW_VECT_C": qint8 [ batch, channels / 4, height, width, 4 ]

כדאי לשקול את הפעולה כהפיכת טנסור 6-D. למשל עבור data_format = NHWC, ניתן לציין כל אלמנט בטנזור הקלט באמצעות 6 קואורדינטות, מסודרות לפי הפחתת משמעות פריסת הזיכרון כמו: n,iY,iX,bY,bX,oC (כאשר n=אינדקס אצווה, iX, iY פירושו X או קואורדינטות Y בתוך תמונת הקלט, bX, byY פירושו קואורדינטות בתוך בלוק הפלט, oC פירושו ערוצי פלט). הפלט יהיה הקלט שיועבר לפריסה הבאה: n,iY,bY,iX,bX,oC

פעולה זו שימושית לשינוי גודל ההפעלה בין פיתולים (אך שמירה על כל הנתונים), למשל במקום איגום. זה גם שימושי לאימון מודלים קונבולוציוניים בלבד.

לדוגמה, בהינתן קלט של צורה [1, 1, 1, 4] , data_format = "NHWC" ו-block_size = 2:

x = [[[[1, 2, 3, 4]]]]

  


 

This operation will output a tensor of shape [1, 2, 2, 1]:


 


   

 כאן, לקלט יש אצווה של 1 ולכל רכיב אצווה יש צורה [1, 1, 4] , הפלט המתאים יהיה בעל 2x2 אלמנטים ויהיה בעל עומק של ערוץ 1 (1 = 4 / (block_size * block_size) ). צורת רכיב הפלט היא [2, 2, 1] .

עבור טנזור קלט עם עומק גדול יותר, כאן של צורה [1, 1, 1, 12] , למשל

 פעולה זו, עבור בלוק בגודל 2, תחזיר את הטנסור הבא של הצורה [1, 2, 2, 3]