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

החזרות:

  • Output פלט: הנתונים הכמותיים המופקים מהקלט המצוף.
  • Output פלט_מיני: הערך המינימלי בפועל של סקלר המשמש לפלט.
  • 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

פלט_מקס

::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 Mode(
  StringPiece x
)

RoundMode

Attrs RoundMode(
  StringPiece x
)