फ़्लोट प्रकार के 'इनपुट' टेंसर को 'T' प्रकार के 'आउटपुट' टेंसर में परिमाणित करें।
[min_range, max_range] स्केलर फ़्लोट हैं जो 'इनपुट' डेटा के लिए सीमा निर्दिष्ट करते हैं। 'मोड' विशेषता ठीक से नियंत्रित करती है कि फ्लोट मानों को उनके परिमाणित समकक्षों में परिवर्तित करने के लिए कौन सी गणनाओं का उपयोग किया जाता है। 'राउंड_मोड' विशेषता नियंत्रित करती है कि फ्लोट मानों को उनके परिमाणित समकक्षों में पूर्णांकित करते समय किस राउंडिंग टाई-ब्रेकिंग एल्गोरिदम का उपयोग किया जाता है।
'MIN_COMBINED' मोड में, टेंसर का प्रत्येक मान निम्नलिखित से गुजरेगा:
out[i] = (in[i] - min_range) * range(T) / (max_range - min_range)
if T == qint8: out[i] -= (range(T) + 1) / 2.0
MIN_COMBINED मोड उदाहरण
मान लें कि इनपुट प्रकार फ्लोट है और इसकी संभावित सीमा [0.0, 6.0] है और आउटपुट प्रकार क्विंट8 ([0, 255]) है। न्यूनतम_रेंज और अधिकतम_रेंज मान 0.0 और 6.0 के रूप में निर्दिष्ट किए जाने चाहिए। फ़्लोट से क्विंट8 तक मात्रा निर्धारित करने से इनपुट के प्रत्येक मान को 255/6 से गुणा किया जाएगा और क्विंट8 पर डाला जाएगा।
यदि आउटपुट प्रकार 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<T>::min()
quantized = max(quantized, numeric_limits<T>::min())
quantized = min(quantized, numeric_limits<T>::max())
स्केल्ड मोड उदाहरण
`SCALED` मोड `QuantizeAndDequantize{V2|V3}` में प्रयुक्त परिमाणीकरण दृष्टिकोण से मेल खाता है।
यदि मोड `स्केलेड` है, तो प्रत्येक इनपुट मान को स्केलिंग_फैक्टर से गुणा करके परिमाणीकरण किया जाता है। स्केलिंग_फैक्टर को `min_range` और `max_range` से जितना संभव हो उतना बड़ा निर्धारित किया जाता है ताकि `min_range` से `max_range` तक की सीमा प्रकार T के मानों के भीतर प्रतिनिधित्व योग्य हो।
const int min_T = std::numeric_limits<T>::min();
const int max_T = std::numeric_limits<T>::max();
const float max_float = std::numeric_limits<float>::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);
min_range = min_T / scale_factor;
max_range = max_T / scale_factor;
इसलिए हम इनपुट मानों को (-10, 9.921875) से (-128, 127) की सीमा में परिमाणित करेंगे।
इनपुट टेंसर को अब मानों को `min_range` से `max_range` तक क्लिप करके परिमाणित किया जा सकता है, फिर स्केल_फैक्टर द्वारा निम्नानुसार गुणा किया जा सकता है:
result = round(min(max_range, max(min_range, input)) * scale_factor)
नैरो_रेंज (बूल) विशेषता
यदि सत्य है, तो हम न्यूनतम परिमाणित मान का उपयोग नहीं करते हैं। यानी int8 के लिए परिमाणित आउटपुट, यह पूर्ण -128..127 रेंज के बजाय -127..127 रेंज तक सीमित रहेगा। यह कुछ अनुमान बैकएंड के साथ अनुकूलता के लिए प्रदान किया गया है। (केवल स्केल्ड मोड पर लागू होता है)
अक्ष (पूर्णांक) विशेषता
एक वैकल्पिक `अक्ष` विशेषता इनपुट टेंसर के एक आयाम सूचकांक को निर्दिष्ट कर सकती है, जैसे कि परिमाणीकरण श्रेणियों की गणना की जाएगी और उस आयाम के साथ टेंसर के प्रत्येक स्लाइस के लिए अलग से लागू किया जाएगा। यह प्रति-चैनल परिमाणीकरण के लिए उपयोगी है।
यदि अक्ष निर्दिष्ट है, min_range और max_range
यदि `अक्ष`=कोई नहीं, प्रति-टेंसर परिमाणीकरण सामान्य रूप से किया जाता है।
सुनिश्चित_न्यूनतम_रेंज (फ्लोट) विशेषता
सुनिश्चित करता है कि न्यूनतम परिमाणीकरण सीमा कम से कम यह मान हो। इसके लिए लीगेसी डिफ़ॉल्ट मान 0.01 है, लेकिन नए उपयोगों के लिए इसे 0 पर सेट करने का दृढ़ता से सुझाव दिया गया है।
नेस्टेड क्लासेस
कक्षा | परिमाणीकरण.विकल्प | Quantize के लिए वैकल्पिक विशेषताएँ |
स्थिरांक
डोरी | OP_NAME | इस ऑप का नाम, जैसा कि TensorFlow कोर इंजन द्वारा जाना जाता है |
सार्वजनिक तरीके
स्थैतिक परिमाणीकरण.विकल्प | अक्ष (लंबा अक्ष) |
स्थिर <T टीटाइप का विस्तार करता है > परिमाणीकरण <T> करता है | |
स्थैतिक परिमाणीकरण.विकल्प | सुनिश्चित करें न्यूनतम रेंज (फ्लोट सुनिश्चित करें न्यूनतम रेंज) |
स्थैतिक परिमाणीकरण.विकल्प | मोड (स्ट्रिंग मोड) |
स्थैतिक परिमाणीकरण.विकल्प | नैरोरेंज (बूलियन नैरोरेंज) |
आउटपुट <T> | आउटपुट () फ्लोट इनपुट से उत्पादित मात्राबद्ध डेटा। |
आउटपुट < TFloat32 > | आउटपुटमैक्स () अंतिम परिमाणीकरण सीमा अधिकतम, स्केलिंग से पहले इनपुट मानों को क्लिप करने और उन्हें परिमाणित मानों तक पूर्णांकित करने के लिए उपयोग की जाती है। |
आउटपुट < TFloat32 > | आउटपुटमिन () अंतिम परिमाणीकरण सीमा न्यूनतम, स्केलिंग से पहले इनपुट मानों को क्लिप करने और उन्हें परिमाणित मानों तक पूर्णांकित करने के लिए उपयोग की जाती है। |
स्थैतिक परिमाणीकरण.विकल्प | राउंडमोड (स्ट्रिंग राउंडमोड) |
विरासत में मिले तरीके
स्थिरांक
सार्वजनिक स्थैतिक अंतिम स्ट्रिंग OP_NAME
इस ऑप का नाम, जैसा कि TensorFlow कोर इंजन द्वारा जाना जाता है
सार्वजनिक तरीके
सार्वजनिक स्थैतिक क्वांटाइज़ <T> बनाएं ( स्कोप स्कोप, ऑपरेंड < TFloat32 > इनपुट, ऑपरेंड < TFloat32 > minRange, ऑपरेंड < TFloat32 > maxRange, क्लास<T> T, विकल्प... विकल्प)
एक नए क्वांटाइज़ ऑपरेशन को लपेटकर एक क्लास बनाने की फ़ैक्टरी विधि।
पैरामीटर
दायरा | वर्तमान दायरा |
---|---|
न्यूनतम श्रेणी | परिमाणीकरण सीमा का न्यूनतम मान. यह मान अन्य मापदंडों के आधार पर ऑप द्वारा समायोजित किया जा सकता है। समायोजित मान `आउटपुट_मिन` पर लिखा गया है। यदि `अक्ष` विशेषता निर्दिष्ट है, तो यह एक 1-डी टेंसर होना चाहिए जिसका आकार इनपुट और आउटपुट टेंसर के `अक्ष` आयाम से मेल खाता है। |
अधिकतम सीमा | परिमाणीकरण सीमा का अधिकतम मान. यह मान अन्य मापदंडों के आधार पर ऑप द्वारा समायोजित किया जा सकता है। समायोजित मान `आउटपुट_मैक्स` पर लिखा गया है। यदि `अक्ष` विशेषता निर्दिष्ट है, तो यह एक 1-डी टेंसर होना चाहिए जिसका आकार इनपुट और आउटपुट टेंसर के `अक्ष` आयाम से मेल खाता है। |
विकल्प | वैकल्पिक गुण मान रखता है |
रिटर्न
- क्वांटाइज़ का एक नया उदाहरण
सार्वजनिक आउटपुट < TFloat32 > आउटपुटमैक्स ()
अंतिम परिमाणीकरण सीमा अधिकतम, स्केलिंग से पहले इनपुट मानों को क्लिप करने और उन्हें परिमाणित मानों तक पूर्णांकित करने के लिए उपयोग की जाती है। यदि `अक्ष` विशेषता निर्दिष्ट है, तो यह एक 1-डी टेंसर होगा जिसका आकार इनपुट और आउटपुट टेंसर के `अक्ष` आयाम से मेल खाता है।
सार्वजनिक आउटपुट < TFloat32 > आउटपुटमिन ()
अंतिम परिमाणीकरण सीमा न्यूनतम, स्केलिंग से पहले इनपुट मानों को क्लिप करने और उन्हें परिमाणित मानों तक पूर्णांकित करने के लिए उपयोग की जाती है। यदि `अक्ष` विशेषता निर्दिष्ट है, तो यह एक 1-डी टेंसर होगा जिसका आकार इनपुट और आउटपुट टेंसर के `अक्ष` आयाम से मेल खाता है।