יום הקהילה ML הוא 9 בנובמבר! הצטרפו אלינו עדכונים מ- TensorFlow, JAX, ועוד למידע נוסף

זרימת טנסור :: אופ :: לכמת V2

#include <array_ops.h>

כמת את טנזור 'קלט' מהצף לסוג 'פלט' של סוג '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. גורם הסולם מוגדר מ- min_range ו- max_range להיות גדול ככל האפשר, כך שהטווח min_range max_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 של המבצע הזה. יש להשתמש בפלטים אלה כטווח לכל חישוב נוסף.

מאפיין narrow_range (bool)

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

מאפיין ציר (int)

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

אם צוין ציר, min_range ו- max_range

אם axis = אין, כימות פר טנסור מתבצע כרגיל.

מאפיין_המינימום_סדר (float)

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

טענות:

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

החזרות:

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

פלט_מקס

::tensorflow::Output output_max

output_min

::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
)

RoundMode

Attrs RoundMode(
  StringPiece x
)