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
, איננו משתמשים בכל הטווח של סוג הפלט, בוחרים להחליק את הערך הנמוך ביותר האפשרי עבור סימטריה (למשל, טווח הפלט הוא -127 עד 127, לא -128 עד 127 עבור קוונטיזציה של 8 סיביות עם סימנים), כך ש-0.0 ממפה ל-0.
ראשית אנו מוצאים את טווח הערכים בטנזור שלנו. הטווח שאנו משתמשים בו תמיד מרוכז על 0, אז אנו מוצאים את m כזה
m = max(abs(input_min), abs(input_max))
טווח טנזור הקלט שלנו הוא אז [-m, m]
.
לאחר מכן, אנו בוחרים את דלי הקוונטיזציה שלנו לנקודות קבועות, [min_fixed, max_fixed]
. אם T חתום, זהו
num_bits = sizeof(T) * 8 [min_fixed, max_fixed] = [-(1 << (num_bits - 1) - 1), (1 << (num_bits - 1)) - 1]
אחרת, אם T ללא סימן, טווח הנקודות הקבוע הוא
[min_fixed, max_fixed] = [0, (1 << num_bits) - 1]
מכאן אנו מחשבים את גורם קנה המידה שלנו, s:
s = (max_fixed - min_fixed) / (2 * m)
כעת אנו יכולים לכמת את המרכיבים של הטנזור שלנו:
result = round(input * s)
דבר אחד שכדאי להיזהר ממנו הוא שהמפעיל עשוי לבחור להתאים מעט את ערכי המינימום והמקסימום המבוקשים במהלך תהליך הקוונטיזציה, לכן עליך להשתמש תמיד ביציאות הפלט כטווח לחישובים נוספים. לדוגמה, אם ערכי המינימום והמקסימום המבוקשים קרובים לשווים, הם יופרדו על ידי ערך אפסילון קטן כדי למנוע יצירת חוצצים כמותיים שאינם בצורתם. אחרת, אתה יכול בסופו של דבר לקבל חוצצים שבהם כל הערכים הכומתיים ממפים לאותו ערך צף, מה שגורם לבעיות עבור פעולות שצריך לבצע עליהם חישובים נוספים.
טיעונים:
- scope: אובייקט Scope
- min_range: הערך הסקלרי המינימלי שיוצר עבור הקלט.
- max_range: הערך הסקלרי המקסימלי המופק עבור הקלט.
החזרות:
- פלט
Output
: הנתונים הכומתיים המופקים מהקלט הצף. -
Output
output_min: הערך הסקלרי המינימלי בפועל המשמש עבור הפלט. -
Output
output_max: הערך הסקלרי המקסימלי בפועל המשמש עבור הפלט.
בנאים והורסים | |
---|---|
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 |
פונקציות סטטיות ציבוריות | |
---|---|
Mode (StringPiece 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 Mode( StringPiece x )
RoundMode
Attrs RoundMode( StringPiece x )
אלא אם צוין אחרת, התוכן של דף זה הוא ברישיון Creative Commons Attribution 4.0 ודוגמאות הקוד הן ברישיון Apache 2.0. לפרטים, ניתן לעיין במדיניות האתר Google Developers. Java הוא סימן מסחרי רשום של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2024-11-18 (שעון UTC).