एक नेटवर्क
पेंटिंग और पूरी थ्रेड के लिए एक नेटवर्क
एक वास्तविक नेटवर्क, जिसे यहीं बनाया गया और यहीं प्रशिक्षित किया गया: पेंटिंग के पैच, पेंट द्वारा सुझाई गई गहराई और इस बातचीत का हर अक्षर, एक साझा स्थान में। कुछ भी प्री-ट्रेन्ड नहीं है।
पेंटिंग, पैच दर पैच
नेटवर्क पेंटिंग को छोटे पैच में देखता है, जिनमें से प्रत्येक का अपना प्रकाश, रंग और स्थान होता है, और उन शब्दों को सीखता है। वही वेट्स (weights) धागे के अक्षरों को पढ़ते हैं।
- प्रशिक्षित चरण
- 0
- चित्र त्रुटि
- —
- अक्षर त्रुटि
- —
- गहराई त्रुटि
- —
- वे पैच जिन्हें अपने शब्द मिल गए
- —
- पेंट के पैच
- 0
- इसके स्पेस में शब्द
- 0
- सीखे गए अक्षर
- 0
- ज्ञात वर्ण
- 0
जो शब्द यह सीखता है वे वही हैं जो पेंट सिखा सकता है: एक पैच कितना चमकदार है, वह किस रंग का है, वह कहाँ स्थित है। टेक्स्ट कार्य अक्षरों के क्रम को सीखता है, अर्थ को नहीं। यहाँ कुछ भी प्री-ट्रेन्ड नहीं है; ग्रेडिएंट्स इसी टैब में चलते हैं।
प्रशिक्षण, लाइव
यह पेज खुलने पर अपने आप शुरू हो जाता है और यहीं, इसी टैब में सीखता है। हर सौ स्टेप्स पर यह लिखता है कि उसने क्या मापा।
नेटवर्क बनने की प्रतीक्षा है…
पूरा ऐप, Python और JAX में
यह पेज और नीचे दिया गया प्रोग्राम एक ही नेटवर्क हैं। प्रोग्राम पूरा एप्लिकेशन है: एक GTK4 विंडो, JAX ग्रेडिएंट्स, पेंटिंग, थ्रेड, वह गहराई जिसकी यह भविष्यवाणी करता है और साझा स्थान। इसे कॉपी करें या सहेजें, फिर इसे अपनी मशीन पर चलाएं।
- पेंट के पैच
- —
- शब्द जो यह सीखता है
- —
- अक्षर जो यह पढ़ता है
- —
- साथ रखने के लिए फाइलें
- net_gtk.py
विंडो क्या करती है
- 300 या 2,000 स्टेप्स ट्रेन करें, या बीच में ही रोक दें; लर्निंग एक थ्रेड में चलती है इसलिए विंडो चालू रहती है।
- पेंटिंग के किसी भी पैच पर क्लिक करें और यह आपको बताएगा कि उस पैच के लिए उसके पास क्या शब्द हैं।
- इसे शब्दों में पूछें — वार्म गोल्ड, डार्क ब्लू — और यह उन पैच को रोशन करता है जिन पर प्रश्न गिरता है।
- इसे कुछ अक्षर दें और यह प्रतिशत के साथ उन अक्षरों की सूची देता है जिनकी वह अगली उम्मीद करता है।
- अपना स्वयं का लेखन पेस्ट करें और इसके बजाय 'Learn this' दबाएं: नए अक्षरों को उसी तालिका में नई पंक्तियाँ मिलती हैं, जो कुछ भी इसे पता था उसे फेंका नहीं जाता है।
- पेंटिंग के नीचे दो चित्र: वह गहराई जिसकी यह भविष्यवाणी करता है, और वह एक स्थान जहाँ बिंदु पेंट हैं और वर्ग शब्द हैं।
- इसके वेट्स को net_weights.json में सहेजें और अगली बार उन्हें फिर से लोड करें।
इसे कैसे चलाएं
एक फोल्डर, एक फाइल, और यदि आपके पास है तो painting.jpg नाम की एक पेंटिंग। Linux पर, उस फोल्डर में:
-
Python पैकेज इंस्टॉल करें
python3 -m pip install jax numpy pillow -
GTK4 और इसके Python बाइंडिंग्स इंस्टॉल करें
sudo apt install python3-gi gir1.2-gtk-4.0 -
विंडो खोलें
python3 net_gtk.py
Windows पर छोटा तरीका MSYS2 है: pacman -S mingw-w64-x86_64-python-gobject mingw-w64-x86_64-gtk4, फिर python -m pip install jax numpy pillow, फिर उसी MSYS2 टर्मिनल में python net_gtk.py।
macOS पर: brew install pygobject3 gtk4, फिर python3 -m pip install jax numpy pillow, फिर python3 net_gtk.py।
कोई डिस्प्ले नहीं है? python3 net_gtk.py --selftest टर्मिनल में ट्रेन करता है और वही नंबर प्रिंट करता है।
JAX के साथ टर्मिनल में इस फ़ाइल को चलाकर इस पेंटिंग और इस थ्रेड पर मापा गया: 400 स्टेप्स → 67% पैच अपने शब्द पा लेते हैं (पिक्चर एरर 0.68), 2,000 स्टेप्स → 95% (0.53), 5,000 स्टेप्स → 97% (0.45)। डेप्थ एरर 0.0003 पर समाप्त होता है और लेटर एरर 3.05 से गिरकर 2.90 हो जाता है।
एक ब्राउज़र Python नहीं चला सकता, इसलिए यह टैब विंडो के बजाय फ़ाइल दिखाता है — वही नेटवर्क ऊपर लाइव चल रहा है। यह जिन शब्दों को सीखता है वे वही हैं जो पेंट सिखा सकता है: इस पेंटिंग में नीला रंग नहीं है, इसलिए नीले के बारे में सवाल सोने के पैच पर गिरता है। लेटर हेड अक्षरों के क्रम को जानता है, अर्थ को नहीं।
ऊपर दिए गए Python और JAX के लिए एक कंपाइलर
बॉक्स में एक नेटवर्क का फॉरवर्ड पास है। कंपाइलर इसे पढ़ता है, इसकी जाँच करता है, और इसे दो बार लिखता है: JAX के लिए Python, और JavaScript जो इस टैब में चलता है। एक ट्री, दो बैक एंड।
- टोकन
- —
- ट्री में नोड्स
- —
- फ़ंक्शंस
- —
यह क्या गणना करता है
जाँच इन संख्याओं की तुलना उसी प्रोग्राम से करती है जिसे समान सीडेड वेट्स पर numpy और JAX में चलाया गया था — इसे इस कार्ड के अस्तित्व में आने से पहले मापा गया था, अनुमान नहीं लगाया गया।
भाषा क्या अनुमति देती है
- def name(a, b): एक इंडेंटेड बॉडी के साथ, name = ..., और return ...
- संख्याएँ, नाम, ब्रैकेट, यूनरी माइनस, और मैट्रिक्स उत्पाद के लिए + - * / @।
- .T ट्रांसपोज़ के लिए, और tanh, sqrt, exp, log, sum, mean, maximum कॉल्स।
- कोई भी अन्य चीज़ अनुमान लगाने के बजाय लाइन और कॉलम के साथ कंपाइलर को रोक देती है।
यह एक छोटी भाषा के लिए वास्तविक कंपाइलर है, Python रनटाइम नहीं: कोई लूप नहीं, कोई क्लास नहीं, कोई इम्पोर्ट नहीं। एक नेटवर्क का फॉरवर्ड पास इसके अंदर फिट हो जाता है, यही कारण है कि एक ही टेक्स्ट आपकी मशीन पर JAX और इस टैब में JavaScript बन सकता है।
आभासी आंखें: यह केवल पिक्सेल देखती हैं
एक मॉनिटर की ओर इशारा करती हुई आंख: इसे केवल तस्वीर मिलती है और कुछ नहीं — कोई पेज नहीं, कोई डेटा नहीं, कोई नेटवर्क नहीं। केवल उन पिक्सेल से यह किनारों, कोनों और यह पता लगाती है कि जब आंख बगल में खिसकती है तो प्रत्येक बिंदु कैसे सरकता है, और उससे यह फिर से बनाता है कि अंतरिक्ष में सब कुछ कहां स्थित है।
- देखे गए फ्रेम
- 0
- कोने
- 0
- ट्रैक किया गया
- 0
- औसत गति
- —
- गहराई मिल गई
- —
- अंतरिक्ष में बिंदु
- 0
- एक फ्रेम
- —
गहराई वास्तविक ज्यामिति है, लेकिन केवल आंख के कदम के आकार तक, और केवल वहां जहां तस्वीर में बनावट (texture) हो — सपाट पेंट पकड़ने के लिए कुछ नहीं देता। यह देखना कि दीवार कहां खड़ी है, यह जानना नहीं है कि वह एक दीवार है, और यहां कुछ भी दुनिया का आविष्कार नहीं करता: ऊपर का कमरा पिक्सेल है, जिसे मापा गया है।
आपका विचार, और उसे अभी भी किसकी आवश्यकता होगी
- मॉनिटर पर आंखें एक वास्तविक इंटरफ़ेस हैं: एक मॉडल जिसे स्क्रीन को उसी तरह पढ़ने की आवश्यकता है जैसे एक व्यक्ति पढ़ता है, उसे प्रत्येक प्रोग्राम के लिए किसी प्लगइन की आवश्यकता नहीं होती — जो कुछ भी दिखाई देता है वह पहले से ही इनपुट है।
- एक चलती हुई आंख के दो फ्रेमों से आपको ज्यामिति (geometry) मिलती है, जो बिल्कुल वही है जिससे एक वर्ल्ड मॉडल को सहमत होना होता है; यह कार्ड उस हिस्से को वास्तव में करता है।
- वास्तविक समय में उत्पन्न दुनिया को एक ऐसे मॉडल की भी आवश्यकता होती है जो वह आविष्कार करे जो किसी ने नहीं देखा, जब आप मुड़ते हैं तो इसे सुसंगत रखे, और मिलीसेकंड में चले — वह इस टैब में नहीं है, और एक पेज इसे प्रशिक्षित नहीं कर सकता।
- ईमानदार सीमा: यह आंख यह पता लगाती है कि चीजें कहां हैं, न कि उनका अर्थ क्या है। देखने की गति समझना नहीं है, और एक दूसरे की तुलना में बहुत आसान है।
छवि: लियोनार्डो दा विंची के लास्ट सपर का पब्लिक-डोमेन स्कैन, विकिमीडिया कॉमन्स।
