tensorflow:: אופס:: QuantizeV2
#include <array_ops.h>
כוונט את טנסור ה"קלט" מסוג float לטנסור "פלט" מסוג "T".
תַקצִיר
[min_range, max_range] הם צפים סקלאריים המציינים את הטווח עבור נתוני 'הקלט'. התכונה 'מצב' שולטת בדיוק באילו חישובים נעשה שימוש כדי להמיר את ערכי הציפה למקבילות הכמותיות שלהם. התכונה 'round_mode' שולטת באיזה אלגוריתם שובר שוויון עיגול נעשה שימוש בעת עיגול ערכי ציפה למקבילותיהם הכומתיים.
במצב 'MIN_COMBINED', כל ערך של הטנזור יעבור את הפעולות הבאות:
out[i] = (in[i] - min_range) * range(T) / (max_range - min_range) if T == qint8: out[i] -= (range(T) + 1) / 2.0
כאן range(T) = numeric_limits ::max() - numeric_limits ::min()
range(T) = numeric_limits ::max() - numeric_limits ::min()
range(T) = numeric_limits ::max() - numeric_limits ::min()
דוגמה למצב MIN_COMBINED
נניח שהקלט הוא מסוג float ובעל טווח אפשרי של [0.0, 6.0] וסוג הפלט הוא quint8 ([0, 255]). יש לציין את ערכי min_range ו-max_range כ-0.0 ו-6.0. כימות מ-float ל-quint8 יכפיל כל ערך של הקלט ב-255/6 ויטיל ל-quint8.
אם סוג הפלט היה qint8 ([-128, 127]), הפעולה תגרע בנוסף כל ערך ב-128 לפני הליהוק, כך שטווח הערכים יתיישר עם הטווח של qint8.
אם המצב הוא 'MIN_FIRST', הגישה הזו משמשת:
num_discrete_values = 1 << (# of bits in T) range_adjust = num_discrete_values / (num_discrete_values - 1) range = (range_max - range_min) * range_adjust range_scale = num_discrete_values / range quantized = round(input * range_scale) - round(range_min * range_scale) + numeric_limits::min() quantized = max(quantized, numeric_limits ::min()) quantized = min(quantized, numeric_limits ::max())
ההבדל הגדול ביותר בין זה לבין MIN_COMBINED הוא שהטווח המינימלי מעוגל תחילה, לפני שהוא מופחת מהערך המעוגל. עם MIN_COMBINED, הטיה קטנה מוצגת כאשר איטרציות חוזרות ונשנות של כימות וסילוק קוונטיות יציגו שגיאה גדולה יותר ויותר.
דוגמה למצב SCALED
מצב SCALED
תואם את גישת הקוונטיזציה המשמשת ב- QuantizeAndDequantize{V2|V3}
.
אם המצב הוא SCALED
, הקוונטיזציה מתבצעת על ידי הכפלת כל ערך קלט ב-scaling_factor. ה-scaling_factor נקבע מ- min_range
ו- max_range
להיות גדולים ככל האפשר כך שהטווח מ- min_range
ל- max_range
ניתן לייצוג בתוך ערכים מסוג T.
const int min_T = std::numeric_limits::min(); const int max_T = std::numeric_limits ::max(); const float max_float = std::numeric_limits ::max();
const float scale_factor_from_min_side = (min_T * min_range > 0) ? min_T / min_range : max_float; const float scale_factor_from_max_side = (max_T * max_range > 0) ? max_T / max_range : max_float;
const float scale_factor = std::min(scale_factor_from_min_side, scale_factor_from_max_side);
לאחר מכן אנו משתמשים ב-scale_factor כדי לכוונן טווח_מינימלי וטווח_מקסימלי באופן הבא:
min_range = min_T / scale_factor; max_range = max_T / scale_factor;
למשל אם T = qint8, ובהתחלה min_range = -10, ו-max_range = 9, נשווה -128/-10.0 = 12.8 ל-127/9.0 = 14.11, ונקבע scaling_factor = 12.8 במקרה זה, min_range יישאר -10, אבל max_range יותאם ל-127 / 12.8 = 9.921875
אז נכמת ערכי קלט בטווח (-10, 9.921875) עד (-128, 127).
כעת ניתן לכמת את טנזור הקלט על ידי חיתוך ערכים לטווח min_range
עד max_range
, ולאחר מכן להכפיל ב-scale_factor באופן הבא:
result = round(min(max_range, max(min_range, input)) * scale_factor)
ה- min_range
המותאמים ו- max_range
מוחזרים כמוצאים 2 ו-3 של פעולה זו. יש להשתמש בתפוקות אלה כטווח עבור כל חישוב נוסף.
תכונת narrow_range (bool).
אם זה נכון, אנחנו לא משתמשים בערך המינימלי הקוונטי. כלומר עבור int8, הפלט המקוונטי, הוא יהיה מוגבל לטווח -127..127 במקום לטווח המלא -128..127. זה מסופק עבור תאימות עם מסקנות עורפיות מסוימות. (חל רק על מצב SCALED)
תכונת ציר (int).
תכונת axis
אופציונלית יכולה לציין אינדקס ממדים של טנזור הקלט, כך שטווחי קוונטיזציה יחושבו ויושמו בנפרד עבור כל פרוסה של הטנזור לאורך ממד זה. זה שימושי עבור קוונטיזציה לכל ערוץ.
אם צוין ציר, min_range ו-max_range
אם axis
=ללא, כימת פר-טנסור מבוצעת כרגיל.
תכונת טווח_מינימום (צף).
מבטיח שטווח הקוונטיזציה המינימלי הוא לפחות ערך זה. ערך ברירת המחדל הישן עבור זה הוא 0.01, אך מומלץ מאוד להגדיר אותו ל-0 עבור שימושים חדשים.
טיעונים:
- scope: אובייקט Scope
- min_range: הערך המינימלי של טווח הקוונטיזציה. ערך זה עשוי להיות מותאם על ידי ה-op בהתאם לפרמטרים אחרים. הערך המותאם נכתב ל-
output_min
. אם מציינת תכונתaxis
, זה חייב להיות טנזור 1-D שגודלו תואם את מימדaxis
של טנסור הקלט והפלט. - max_range: הערך המקסימלי של טווח הקוונטיזציה. ערך זה עשוי להיות מותאם על ידי ה-op בהתאם לפרמטרים אחרים. הערך המותאם נכתב ל-
output_max
. אם מציינת תכונתaxis
, זה חייב להיות טנזור 1-D שגודלו תואם את מימדaxis
של טנסור הקלט והפלט.
החזרות:
- פלט
Output
: הנתונים הכומתיים המופקים מהקלט הצף. -
Output
output_min: המינימום של טווח הקוונטיזציה הסופי, המשמש לגזירת ערכי קלט לפני קנה המידה ועיגולם לערכים כמותיים. אם תכונתaxis
צוינה, זה יהיה טנזור 1-D שגודלו תואם את מימדaxis
של טנסור הקלט והפלט. -
Output
output_max: טווח הכימות הסופי המקסימלי, המשמש לגזירת ערכי קלט לפני קנה המידה ועיגולם לערכים כמותיים. אם תכונתaxis
צוינה, זה יהיה טנזור 1-D שגודלו תואם את מימדaxis
של טנסור הקלט והפלט.
בנאים והורסים | |
---|---|
QuantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range, DataType T) | |
QuantizeV2 (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input min_range, :: tensorflow::Input max_range, DataType T, const QuantizeV2::Attrs & attrs) |
תכונות ציבוריות | |
---|---|
operation | |
output | |
output_max | |
output_min |
פונקציות סטטיות ציבוריות | |
---|---|
Axis (int64 x) | |
EnsureMinimumRange (float x) | |
Mode (StringPiece x) | |
NarrowRange (bool x) | |
RoundMode (StringPiece x) |
מבנים | |
---|---|
tensorflow:: ops:: QuantizeV2:: Attrs | קובעי תכונות אופציונליים עבור QuantizeV2 . |
תכונות ציבוריות
מִבצָע
Operation operation
תְפוּקָה
::tensorflow::Output output
output_max
::tensorflow::Output output_max
output_min
::tensorflow::Output output_min
תפקידים ציבוריים
QuantizeV2
QuantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input min_range, ::tensorflow::Input max_range, DataType T )
QuantizeV2
QuantizeV2( const ::tensorflow::Scope & scope, ::tensorflow::Input input, ::tensorflow::Input min_range, ::tensorflow::Input max_range, DataType T, const QuantizeV2::Attrs & attrs )
פונקציות סטטיות ציבוריות
צִיר
Attrs Axis( int64 x )
EnsureMinimumRange
Attrs EnsureMinimumRange( float x )
מצב
Attrs Mode( StringPiece x )
טווח צר
Attrs NarrowRange( bool x )
RoundMode
Attrs RoundMode( StringPiece x )
אלא אם צוין אחרת, התוכן של דף זה הוא ברישיון Creative Commons Attribution 4.0 ודוגמאות הקוד הן ברישיון Apache 2.0. לפרטים, ניתן לעיין במדיניות האתר Google Developers. Java הוא סימן מסחרי רשום של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2024-11-24 (שעון UTC).