Altifigence Academy

8 / 24 · प्रयोग

प्रयोगशाला: क्वांटाइज़ेशन अनुबंध चलाएँ

समान uint8 सेटिंग में −40 क्वांटाइज़ करें। कोड और डीक्वांटाइज़ मान क्या हैं और कौन सी assertion जोड़ेंगे?

लक्ष्य और तैयारी

कोड मैपिंग, ऋणात्मक बराबरी, संतृप्ति और केंद्रित पूर्णांक डॉट प्रोडक्ट चलाएँ। फ़ाइल में Node.js चाहिए, बाहरी पैकेज नहीं। नए खाली फ़ोल्डर में quantize-lab.mjs बनाएँ, नीचे का कोड नकल करें और node quantize-lab.mjs चलाएँ। Node बिना अनुमान तालिका हाथ से करें। स्थापित Digital Design Studio इस फ़ाइल प्रकार का समर्थित create/open-file कार्यप्रवाह दे तो स्वयं वही फ़ाइल वहाँ बनाकर देख सकते हैं। निर्देश DDS के अंदर स्वचालित परियोजना निर्माण या निष्पादन का दावा नहीं करते।

चलाने से पहले अनुमान करें

स्केल 0.25 और शून्य बिंदु 128 में −0.625 बराबरी −2.5, सम −2 और कोड 126 है। −0.375 भी 126। शून्य 128; 0.375 और 0.625 दोनों 130। 40 से 288 बनता, इसलिए uint8 संतृप्ति 255 करती है। [126,126,128,130,130,255] अनुमान करें। ये मामले ऋणात्मक/धनात्मक बराबरी, वास्तविक शून्य और क्लिप अलग करते हैं।

[130,126] को [2,−2] केंद्रित करें। वज़न [3,−2] में योग दस। संयुक्त स्केल 0.125, वास्तविक 1.25; आउटपुट स्केल 0.25 और शून्य बिंदु 128 से 133। कोड संख्यात्मक अनुबंध अभ्यास है, मॉडल आयातक या शुद्धता बेंचमार्क नहीं।

पहले अपरिवर्तित assertions चलाएँ। फिर 0.625 के बदले 0.875 करें। अपेक्षित मान बदलने से पहले बराबरी 3.5 से चार और कोड 132 अनुमान करें। थोड़ी देर roundEven के बदले Math.round करके ऋणात्मक बराबरी assertion विफल देखें, फिर लौटाएँ। इच्छित विफलता दिखाती है कि परीक्षण जरूरी व्यवहार देखता है।

अंत में संतृप्त कोड 255 डीक्वांटाइज़ करें: 31.75, 40 की तुलना में −8.25 त्रुटि। यह सामान्य आधे-कदम राउंडिंग सीमा से बहुत अधिक है। स्केल चुनने में सीमा और विभेदन का समझौता है; मॉडल शुद्धता मापने में अलग मॉडल और डेटासेट चाहिए। अनुमान, कमांड आउटपुट और बदले मामले का तर्क लिखें।

चलने योग्य फ़ाइल

javascript
import assert from 'node:assert/strict';
// An exact tie is handled with nearest-even, including negative input.
export function roundEven(v) {
  const f = Math.floor(v), d = v - f;
  return d < 0.5 ? f : d > 0.5 ? f + 1 : f % 2 === 0 ? f : f + 1;
}
export const quantize = (x, s, z) => Math.min(255, Math.max(0, roundEven(x / s) + z));
const values = [-0.625, -0.375, 0, 0.375, 0.625, 40];
const codes = values.map(x => quantize(x, 0.25, 128));
assert.deepEqual(codes, [126, 126, 128, 130, 130, 255]);
assert.equal(roundEven(-1.5), -2);
assert.equal(roundEven(-2.5), -2);
const xq = [130, 126], wq = [3, -2];
const acc = xq.reduce((sum, x, i) => sum + (x - 128) * wq[i], 0);
assert.equal(acc, 10);
assert.equal(acc * 0.25 * 0.5, 1.25);
assert.equal(quantize(1.25, 0.25, 128), 133);
console.log(JSON.stringify({codes, acc, real: 1.25, output: 133}));

खुद आज़माएँ

समान uint8 सेटिंग में −40 क्वांटाइज़ करें। कोड और डीक्वांटाइज़ मान क्या हैं और कौन सी assertion जोड़ेंगे?

व्याख्या पढ़ें

असीमित कोड −32 है, इसलिए शून्य पर क्लिप होता है। डीक्वांटाइज़ेशन (0−128)×0.25=−32। ऋणात्मक संतृप्ति के लिए quantize(−40,0.25,128) शून्य है, यह assertion जोड़ें।

Lesson files

quantize-lab.mjs ↓

आपका चयन इस ब्राउज़र पर लागू होता है। फ़ुटर से कभी भी बदलें।