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 , איננו משתמשים בטווח המלא של סוג הפלט, ונבחר לדלג על הערך הנמוך ביותר האפשרי לסימטריה (למשל, טווח הפלט הוא -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)

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

טיעונים:

  • היקף: אובייקט היקף
  • 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

פלט_מקסימלי

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

מצב עגול

Attrs RoundMode(
  StringPiece x
)