एक छोटा मॉडल ट्रेन करना
हर विंडो को कुछ काम के नंबरों में बदलें, जैसे कि mean और energy, और एक छोटा क्लासिफायर ट्रेन करें। फिर held-out डेटा पर ईमानदारी से उसकी जांच करें।
60 सेकंड में
एक छोटा मॉडल ट्रेन करना
हर विंडो को कुछ काम के नंबरों में बदलें, जैसे कि mean और energy, और एक छोटा क्लासिफायर ट्रेन करें। फिर held-out डेटा पर ईमानदारी से उसकी जांच करें।
दो आसान और असरदार features
| Feature | इसे कैसे निकालें | यह क्या बताता है |
|---|---|---|
| Mean (हर axis का) | विंडो की रीडिंग्स का औसत (average) | गुरुत्वाकर्षण किस तरफ है, यानी डिवाइस कैसे झुका हुआ है या रखा है |
| Energy (हर axis की) | (reading − mean)² का औसत, जिसे variance भी कहते हैं | डिवाइस कितना हिल-डुल रहा है या कांप रहा है |
| अन्य चीजें जो आप जोड़ सकते हैं | Minimum, maximum, प्रति सेकंड peaks, frequency features | किसी रिदम की स्पीड, झटके से लगी चोटें (sharp hits), कदम |
import numpy as np
rng = np.random.default_rng(1)
t = np.arange(50) / 50
still = np.column_stack([rng.normal(0, 0.02, 50), rng.normal(0, 0.02, 50), 1 + rng.normal(0, 0.02, 50)])
walk = still.copy()
walk[:, 2] += 0.3 * np.sin(2 * np.pi * 1.8 * t)
def features(window):
mean = window.mean(axis=0) # where gravity points
energy = ((window - mean) ** 2).mean(axis=0) # how much it moves
return np.concatenate([mean, energy])
np.set_printoptions(precision=4, suppress=True)
print("still: ", features(still))
print("walking:", features(walk))एक छोटा क्लासिफायर चुनना
| मॉडल | यह एक छोटी चिप के लिए क्यों सही है | इन बातों का ध्यान रखें |
|---|---|---|
| डिसिजन ट्री (कम depth वाला) | सिर्फ़ कुछ तुलनाएं; पढ़ने और C में लिखने में आसान | ज़्यादा गहरे (deep) ट्री ओवरफ़िट हो जाते हैं |
| लॉजिस्टिक्स रिग्रेशन (Logistic regression) | प्रति क्लास प्रति फीचर एक वेट (weight); बहुत छोटा | सिर्फ़ सीधी बाउंड्री बनाता है |
| छोटा न्यूरल नेटवर्क | ज़्यादा जटिल पैटर्न सीखता है; TinyML runtimes द्वारा अच्छी तरह सपोर्ट किया जाता है | ज़्यादा डेटा और सावधानी की ज़रूरत होती है |
ईमानदार टेस्टिंग
- 1
ट्रेनिंग से पहले डेटा बांटें
दूसरे लोगों या सेशन्स का एक टेस्ट सेट अलग रखें, और ट्यूनिंग करते समय उसे बिल्कुल न देखें। - 2
ट्रेनिंग सेट पर ट्रेन करें
सिर्फ़ ट्रेनिंग डेटा (या अलग वैलिडेशन सेट) का इस्तेमाल करके मॉडल को फ़िट करें और सेटिंग्स चुनें। - 3
एक बार टेस्ट करें
अलग रखे गए (held-out) टेस्ट सेट पर एक्यूरेसी मापें। - 4
Confusion matrix को समझें
देखें कि कौन-सी क्लासेस आपस में गड़बड़ा रही हैं। इससे पता चलता है कि कौन-सा डेटा या features जोड़ने की ज़रूरत है।
और देखें और पढ़ें
लैब
एक ऐसा feature फ़ंक्शन जिससे एक छोटा डिसिजन ट्री held-out डेटा पर 90% या उससे ज़्यादा हासिल कर सके।
समस्या
स्टार्टर कोड चार क्लासेस के लिए एक्सेलरोमीटर की बनावटी विंडो बनाता है: flat, tilted, walking और shaking। ट्रेनिंग और टेस्ट डेटा अलग-अलग random seeds से आते हैं, इसलिए टेस्ट विंडो नई हैं।
features(window)लिखें। यह (50, 3) शेप की एक विंडो लेता है और नंबरों की एक छोटी लिस्ट (2 से 12 के बीच) लौटाता है।- पहले सिर्फ़ हर axis के mean से शुरुआत करें। इसे चलाएं और confusion matrix को पढ़ें। कौन-सी क्लासेस आपस में गड़बड़ा रही हैं?
- हर axis की energy जोड़ें: (reading − mean)² का mean। इसे फिर से चलाएं।
- 90% या उससे ज़्यादा held-out एक्यूरेसी का लक्ष्य रखें। हर feature क्या नया जोड़ता है, इस पर एक वाक्य लिखें।
प्रैक्टिस लैब
कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।
कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1सिर्फ़ mean वाला मॉडल "flat" को "walking" और "shaking" के साथ गड़बड़ा देता है। ऐसा क्यों होता है, और energy इसे कैसे ठीक करती है?दिखाएं
तीनों में ग्रेविटी मुख्य रूप से z axis पर होती है, इसलिए उनकी औसत रीडिंग्स एक जैसी होती हैं। जो चीज़ अलग है, वह है हलचल: flat में शायद ही कोई बदलाव होता है, walking में ऊपर-नीचे गति होती है, shaking में सभी axes पर बहुत ज़्यादा हलचल होती है। Energy यह मापती है कि रीडिंग्स अपने mean के इर्द-गिर्द कितनी बदलती हैं, इसलिए यह उन्हें अलग कर देती है। flat और tilted में फ़र्क बताने के लिए mean अब भी ज़रूरी है।
Q2आपके features Python में काम करते हैं, लेकिन बोर्ड पर मॉडल हर चीज़ के लिए "shaking" का ही अनुमान लगाता है। आप क्या चेक करेंगे?दिखाएं
एक ही रिकॉर्ड की गई विंडो के लिए बोर्ड और Python में feature नंबरों की तुलना करें। आम वजहें: अलग यूनिट (g के बजाय raw सेंसर काउंट्स), अलग axis क्रम, अलग विंडो लंबाई या सैंपलिंग रेट, या स्केलिंग का कोई छूटा हुआ स्टेप। मॉडल को बिल्कुल उसी तरह के नंबर मिलने चाहिए जिन पर उसे ट्रेन किया गया था।
अक्सर पूछे जाने वाले सवाल
कच्ची (raw) विंडो को सीधे न्यूरल नेटवर्क में क्यों नहीं डाल देते?
आप ऐसा कर सकते हैं, और कई TinyML प्रोजेक्ट्स ऐसा करते भी हैं, खासकर छोटे convolutional networks के साथ। लेकिन इसके लिए ज़्यादा डेटा और बड़े मॉडल की ज़रूरत होती है। Features एक अच्छा पहला कदम हैं: छोटे, तेज़ और समझने में आसान। पहले features आज़माएं, फिर तुलना करें।
क्या मुझे चिप पर features निकालने चाहिए?
हाँ, बोर्ड पर भी ठीक उसी तरह वही features निकाले जाने चाहिए जैसे ट्रेनिंग में निकाले गए थे। अगर आपका Python कोड और आपका C कोड "energy" को अलग-अलग तरीके से निकालते हैं, तो मॉडल को ऐसे इनपुट्स मिलेंगे जो उसने कभी देखे ही नहीं थे। दोनों को एक ही विंडो पर टेस्ट करें और नंबरों की तुलना करें।
Confusion matrix क्या होता है?
एक टेबल जिसमें हर पंक्ति (row) में असली क्लास और हर कॉलम में अनुमानित (predicted) क्लास होती है। विकर्ण (diagonal) पर मौजूद नंबर सही होते हैं; बाकी सब दिखाते हैं कि किस क्लास को गलती से क्या समझ लिया गया।
मुझे कैसे पता चलेगा कि मेरा मॉडल ओवरफ़िट हो रहा है?
अगर ट्रेनिंग एक्यूरेसी held-out एक्यूरेसी से बहुत ज़्यादा है, तो मॉडल ने ट्रेनिंग डेटा की ऐसी बारीकियाँ सीख ली हैं जो नए डेटा पर काम नहीं करतीं। एक छोटा मॉडल इस्तेमाल करें (उदाहरण के लिए कम depth वाला ट्री), ज़्यादा विविध डेटा लें या कम features का इस्तेमाल करें।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।