tensorflow:: ops:: QuantizeV2

#include <array_ops.h>

לכמת את טנזור ה'קלט' מסוג float לטנזור 'פלט' מסוג 'T'.

תַקצִיר

הפונקציות [min_range, max_range] הן מספרים סקלריים מצופים המציינים את הטווח עבור נתוני ה-'קלט'. התכונה 'mode' שולטת בדיוק באילו חישובים ישמשו להמרת ערכי הציפה למספרים הכמותיים המקבילים שלהם. התכונה '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()

דוגמה למצב 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 וה-max_range באופן הבא:

      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 של פעולה זו. יש להשתמש בפלטים אלה כטווח עבור כל חישוב נוסף.

תכונת טווח_צר (bool)

אם הערך נכון, לא נשתמש בערך המינימלי הממוין. כלומר, עבור int8, הפלט הממוין יוגבל לטווח -127..127 במקום הטווח המלא -128..127. זה מסופק לצורך תאימות עם מערכות backend מסוימות של הסקה. (חל רק על מצב SCALED)

תכונת ציר (int)

תכונת axis אופציונלית יכולה לציין אינדקס ממד של טנזור הקלט, כך שטווחי הכימות יחושבו ויוחלו בנפרד עבור כל פרוסה של הטנזור לאורך ממד זה. זה שימושי לכימות לפי ערוץ.

אם צוין ציר, טווח_מינימלי וטווח_מקסימלי

אם axis = ללא, קוונטיזציה לכל טנזור מתבצעת כרגיל.

תכונת ensure_minimum_range (float)

מבטיח שטווח הכימות המינימלי הוא לפחות ערך זה. ערך ברירת המחדל הישן עבור זה הוא 0.01, אך מומלץ מאוד להגדיר אותו ל-0 עבור שימושים חדשים.

טיעונים:

  • היקף: אובייקט היקף
  • min_range: הערך המינימלי של טווח הכימות. ערך זה עשוי להיות מותאם על ידי ה-oper בהתאם לפרמטרים אחרים. הערך המותאם נכתב אל output_min . אם התכונה axis צוינה, זה חייב להיות טנזור חד-ממדי שגודלו תואם למימד axis של טנזורי הקלט והפלט.
  • max_range: הערך המקסימלי של טווח הכימות. ערך זה עשוי להיות מותאם על ידי ה-oper בהתאם לפרמטרים אחרים. הערך המותאם נכתב אל output_max . אם התכונה axis צוינה, זה חייב להיות טנזור חד-ממדי שגודלו תואם למימד axis של טנזורי הקלט והפלט.

החזרות:

  • פלט Output : הנתונים הכמותיים המופקים מהקלט הצף.
  • Output output_min: טווח הכימות המינימלי הסופי, המשמש לחיתוך ערכי קלט לפני שינוי קנה המידה ועיגולם לערכים כמותיים. אם תכונת axis מצוינת, זהו יהיה טנזור חד-ממדי שגודלו תואם למימד axis של טנזורי הקלט והפלט.
  • Output output_max: טווח הכימות הסופי המקסימלי, המשמש לחיתוך ערכי קלט לפני שינוי קנה המידה ועיגולם לערכים כמותיים. אם תכונת axis מצוינת, זהו יהיה טנזור חד-ממדי שגודלו תואם למימד 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

פלט_מקסימלי

::tensorflow::Output output_max

פלט_דקה

::tensorflow::Output output_min

תפקידים ציבוריים

קוונטיזציה V2

 QuantizeV2(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input min_range,
  ::tensorflow::Input max_range,
  DataType T
)

קוונטיזציה V2

 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
)

ודאטווחמינימלי

Attrs EnsureMinimumRange(
  float x
)

מצב

Attrs Mode(
  StringPiece x
)

טווח צר

Attrs NarrowRange(
  bool x
)

מצב עגול

Attrs RoundMode(
  StringPiece x
)