Thumbnail for System Command OPPE Q1: Step-by-Step Solution & Logic Building | IITM by Devloper Harsh

System Command OPPE Q1: Step-by-Step Solution & Logic Building | IITM

Devloper Harsh

10m 48s2,417 words~13 min read
Auto-Generated

[0:00]तो दोस्तों हमारा जो फर्स्ट क्वेश्चन है वो है NPP_1 और अस्यूमिंग कि आप ये डायरेक्टरी ऑलरेडी बना चुके हैं तो आप सिंपली सिंको करेंगे तो आपको पूरा का पूरा क्वेश्चन पेपर दिख जाएगा। तो क्वेश्चंस बहुत सिंपल हैं। आप एक डेटा साइंटिस्ट हैं जो कि एक इमेज क्लासिफिकेशन मॉडल को ट्रेन करना चाहते हैं और जिसमें पांच डिफरेंट डेटासेट हैं। डेटासेट का नाम A से लेकर E है और इमेज को डाउनलोड करने से पहले आप एक डायरेक्टरी स्ट्रक्चर बनाना चाहते हैं। तो आपको एक बायसी स्क्रिप्ट लिखना है जो कि डायरेक्टरीज क्रिएट कर सके डेटासेट के लिए और डायरेक्टरी एक्चुअली कुछ इस फॉर्मेट में होना चाहिए। ट्री स्ट्रक्चर कहते हैं इसको बाय द वे, ठीक है? और हर एक डेटासेट डायरेक्टरी के अंदर हम लोगों को सब डायरेक्टरी बनाने है, ट्रेन, टेस्ट एंड वैलिडेशन, जिसको हम लोग स्प्लिट भी बोलते हैं अगर मशीन लर्निंग के टर्म में देखें तो। और इसके बाद हर के अंदर एक metadata.yml फाइल बनाना है readme.md बनाना है। तो metadata.yml फाइल जो होता है वो metadata कंटेंट करता है डेटासेट के बारे में और readme.md फाइल कैसे डेटासेट को यूज करना है उसके बारे में होता है। ठीक है। आपको ये पर्टिकुलर स्ट्रक्चर बनाना है। तो ये स्ट्रक्चर समझ लीजिए, बहुत इजी हो जाएगा। सबसे पहली चीज जो है, वो है आपका डेटासेट है। तो आप देख सकते हैं कि ये सबसे आउटर में, राइट? तो आउटर में होने की वजह से ये पैरेंट डायरेक्टरी। उसके अंदर हमारा सब डायरेक्टरीज़ है, टेस्ट, ट्रेन एंड वैलिडेशन और उसके अंदर हम लोगों का readme.md, metadata.yml फाइल है। ये डेटासेट A के लिए है। डेटासेट B के लिए भी हम लोगों को सिमिलर करना है। डेटासेट B हमारा पैरेंट है, उसके बाद ट्रेस, ट्रेन एंड वैलिडेशन उसका सब डायरेक्टरीज़ हैं और हर एक डायरेक्टरी के अंदर फिर फाइल है। फिर सिमिलरली डेटासेट C के साथ है और आपको करना कहां तक है? डेटासेट E तक है, ठीक है? अब इंस्ट्रक्शंस पढ़ना है जो कि बहुत इंपॉर्टेंट है। आपका स्क्रिप्ट का जो नेम है वो है datasets.sh। ये फाइल ही आपको नेम में रखना है, ठीक है? ये हमेशा आपका home/se2001 और nppe_1 के अंदर आएगा। अगेन se2001 इसीलिए बिकॉज़ मेरा जो कोर्स है वो डेटा साइंस डिग्री से रिलेटेड है ना कि EST डिग्री से। अगर EST डिग्री है तो CS करके होगा आप चेक कर सकते हैं अपने बोट में। और यहां पे it should create the file metadata.yml and readme.md as described in the problem statement। तो प्रॉब्लम स्टेटमेंट में बताया ही हुआ है, ठीक है? फाइल जो है वो एम्प्टी रहेगा और ये बेसिकली मिनिमल स्पेस को यूज करने की वजह से है। It should not output anything on the console। तो ये बहुत ध्यान रखना है कि आपको कंसोल पे कुछ भी आउटपुट नहीं करना है, बस आपका काम हो जाना चाहिए ऐसा आपको बनाना है। If you want to print something for debugging purposes, write to a file or to the standard error stream। तो स्टैंडर्ड एरर आपको या तो एक फाइल पे लिखना है या फिर स्टैंडर्ड एरर में लिखना है। तो मैं स्टैंडर्ड एरर से ज्यादा बोलता हूं devnull पे लिखिए ज्यादा बेटर है। ओके। ठीक है? तो ये हमारा क्वेश्चन है। आई होप आप समझ गए होंगे कि बेसिकली हम लोगों को एक डेटा स्ट्रक डायरेक्टरी स्ट्रक्चर बनाना है, ठीक है? तो अब हम लोग इसका दो तरीका देखते हैं। पहले हार्ड तरीका देखते हैं फिर मैं इजी तरीका बताऊंगा। बिकॉज़ हार्ड तरीका से समझ जाइएगा तो समझिएगा इंटरनली इसी तरीका कैसे वर्क कर रहा है, ओके? तो चलिए शुरू करते हैं। तो यहां पर मैं ऑलरेडी अपने सॉल्यूशन VM पे आ चुका हूं जो कि OKP का VM है। मैंने ऑलरेडी लॉग इन कैसे करना है, वो पहले से वीडियोस में बता दिया है आप उसको देख सकते हैं, ठीक है? अब यहां पर ls कहूंगा तो पूरी एम्प्टी है। तो सबसे पहली चीज जो हम लोगों को याद रखनी है वो ये है कि हम लोगों को datasets.sh फाइल बनाना है, राइट? तो मैं यहां पर कॉपी कर लेता हूं datasets.sh और यहां पर मैं लिख देता हूं nano। अब ये हमारा आ गया bash स्क्रिप्ट। अब bash स्क्रिप्ट में हम लोगों को सबसे पहले स्वंग डालना होगा, तो उसके लिए हम लोग लिखेंगे hash, colon, bin, bash। बेसिकली bash आपका प्रोग्राम है और bin आपका डायरेक्टरी है। तो जस्ट इसको इंटरप्रेटर को बताने के लिए कि हां, हम लोग यूज कर रहे हैं बिकॉज़ हम लोग डॉट स्लैश सोर्स तरीके से यूज नहीं कर रहे इसको, राइट? ये पास ऑन हो रहा है एक तरीके से। तो हम लोगों को वो चीज का ध्यान रखना है इसलिए हम लोग इसको इस तरीके से करेंगे। अब अगर आप नॉर्मल देखिएगा तो यहां डेटासेट फाइल नहीं दिया हुआ है तभी आपको बोल रहा है कि आपका ये नेम है, ठीक है? और कैटेगरी है। इसलिए हम लोग को पॉइंट जीरो से ही काम शुरू करना पड़ेगा। तो सबसे पहली चीज हम लोगों को डेटासेट के नेम के ऊपर लूप करना होगा। अगेन ये डेटासेट बना हुआ नहीं है। बट क्योंकि बैच में सब कुछ चीजें बड़ी अलग तरीके से काम करती हैं इसलिए हम लोग उसके ऊपर लूप कर सकते हैं, अज़्यूमिंग कि वो डेटासेट बन जाएगा। ओके? तो हम लोग यहां लिखेंगे फॉर लूप थ्रू डेटासेट्स। तो हम लोग यहां पर लिखेंगे for dataset in DatasetA DatasetB DatasetC DatasetD and DatasetE; do। बेसिकली यहां पे हो ये रहा है कि ये जो डेटासेट है, ये डेटासेट A के अंदर जाएगा, फिर B के अंदर, फिर C के अंदर, फिर D के अंदर, फिर E के अंदर। और यहां do के बाद मतलब इसके अंदर का जो भी कमेंट है, उसको लूप में रन करना है। ओके? और इसके बाद यहां के अंदर हम लोग स्प्लिट वाला काम करने वाले थे, याद है आपको? तो हम लोग यहां लिखेंगे create sub dir - split -> train, test, val। ठीक है? आर्डर मैटर नहीं करता उतना इसलिए उसको कोई दिक्कत नहीं है। हम लोग यहां लिखेंगे for split in train test val। validation, बिकॉज़ यहां पर अगर आप देखिएगा तो यहां पर वैलिडेशन बोला गया है, राइट? val नहीं बोला गया है। तो आपको ये ध्यान रखना है कि आप एक्जेक्टली वही चीज यूज कीजिए जो आपको बोला गया है। और do। अगेन आप देख सकते हैं कि ये एक नेस्टेड लूप की तरह यूज़ हो रहा है। आपने python में भी काफी देखा होगा इसको, राइट? तो वही चीज हम लोग यहां कर रहे हैं। तो हो बस ये रहा है कि ये डेटासेट के अंदर जाएगा। तो डेटासेट, डेटासेट A के अंदर जाएगा, फिर वो ट्रेन, टेस्ट एंड वैलिडेशन के अंदर जाएगा जब वो खत्म हो जाएगा, फिर वो डेटासेट B के अंदर जाएगा। तो ये कॉमन सा हमारा आइटरेटिव लूप है। अब यहां पर हम लोग अपना डेटासेट बनाने का काम करेंगे। तो create dataset। वहां पे मैं थोड़ा सा टैब दे देता हूं, बिकॉज़ हमें इंडेंटेशन चाहिए बस समझने के लिए। ऐसा कुछ जरूरी नहीं है आपका बैश में कि आप इंडेंटेशन दे, आप बिना इंडेंटेशन के भी काम कर सकते हैं। बट चीजें सिंपलीफाई हो जाती हैं अगर इंडेंटेड रहे तो। तो यहां पर मैं लिखूंगा mkdir -p। इसके बाद यहां पर आपको देखना है कि क्या करना है। ये थोड़ा इंपॉर्टेंट है, ठीक है? अब ये जो डेटासेट है, ये डेटासेट डेटासेट A, B और C इस पे जा रहा है, राइट? लेकिन इसका वैल्यू कैसे एक्सेस करेंगे? डेटासेट मैं सिंपली लिख दूंगा तो ये काम नहीं करेगा। तो आपको यहां लिखना होगा dollar dataset। इससे क्या होगा? डेटासेट का जो भी करंट वैल्यू है वो इसके अंदर आ जाएगा। और सिमिलरली आपको स्प्लिट का भी वैल्यू बनाना होगा। तो यहां पर हम लोग लिखेंगे स्प्लिट। मैं यहां लिख भी देता हूं, create directory substructure। अब ये मैं -p क्यों लिखा? -p का खासियत ये है कि अगर वो डेटासेट एक्ज़िस्ट करता है, तब तो अच्छी बात है। अगर नहीं करता है, तो वो ऑलरेडी क्रिएट कर देगा। यही रीजन था कि मैंने इसे डायरेक्टली यहां से स्टार्ट कर दिया। मैंने सोचा नहीं कि क्रिएटेड है या नहीं, ठीक है? देखिए मुझे पता है कि मैं आगे जा के इसे क्रिएट करने ही वाला हूं। तो मुझे टेंशन लेने की जरूरत नहीं है, राइट? तो मैंने यहां पर कर दिया। अब ये जो है, ये हमारा रीडायरेक्ट है। तो ये जो भी आउटपुट हमारा आया, इसको हम लोग रीडायरेक्ट कर रहे हैं एक दूसरे फाइल को क्रिएट करने के लिए। यानी कि आप ऐसा समझ लीजिए कि यहां पर हमारा पैरेंट डायरेक्टरी आ गया। अब इसके अंदर हम लोगों को दो फाइल्स क्रिएट करने हैं, metadata.yml एंड readme.md, राइट? तो यहां पर मैं लिखूंगा वापस से dollar dataset/dollar split/metadata.yml और सिमिलरली मैं यहां पर दूसरा भी करूंगा। इस बार हम लोग readme.md के लिए करेंगे। तो dataset/dollar split/readme.md। तो मैं बता देता हूं यहां पर हो क्या रहा है। आपका डेटासेट आइटरेटर है जो डेटासेट A के ऊपर गया। अब डेटासेट A जो है, उसके अंदर ट्रेन आ गया, राइट? तो हमारा सबसे पहला वैल्यू क्या हो जाएगा? DatasetA train। उसके बाद यहां पर आ जाएगा DatasetA train और फिर उसके अंदर हम लोग एक फाइल क्रिएट कर रहे हैं। तो अगर आप इस तरीके से रीडायरेक्ट कीजिएगा तो ये फाइल क्रिएट कर देगा जो भी आपका इसका होगा। तो इसका आउटपुट तो कुछ आने वाला है नहीं, हमें तो एम्प्टी फाइल चाहिए, राइट? तो हमें तो वही करना है। तो हम लोग डायरेक्टली उसको रीडायरेक्ट कर दे रहे हैं यहां पर। तो ये आपका रीडायरेक्ट के लिए, अगर डबल एरो होता तो वो अपेंड के लिए होता। ये बात ध्यान रखिएगा, ये सिंपल सा लॉजिक है अगर आप समझना चाहते हैं तो, ठीक है? तो यहां पर मैं MD कर देता हूं। थोड़ा सा छोटा हो गया है तो इसको छोटा कर देते हैं, हां ठीक है। तो ये हमारा पहला हो गया उसके बाद metadata.yml। तो अगर मैं इनडायरेक्टिव सेंस में बोलूं तो ये कुछ आपको ऐसा आउटपुट देने वाला है for DatasetA/train/metadata.yml। ठीक है? तो इसी तरीके से ये बाकी के लिए भी करेगा। और जैसे ही आपका ये काम कंप्लीट होता है तो आपको बताना होगा कि आपका फॉर लूप एंड हो रहा है, राइट? तो आपको यहां लिखना होगा done। और फिर आपको done लिखना होगा और ये हो गया आपका कोड तैयार। अब अगर हम लोग यहां पर देखें तो मोस्ट प्रोबेबली ये अच्छे से काम करना चाहिए। तो यहां इवैल्यूएशन फेल्ड आ रहा है। हम लोग ने एग्जीक्यूटेबल नहीं बनाया। तो ये कॉमन प्रॉब्लम है। तो इसको सिंपल सा तरीका है। जैसे अभी मैं अगर ls -l करूंगा तो आप देख सकते हैं कि यहां पर हमारे पास X परमिशन नहीं है, राइट? मैं लिखूंगा chmod u+x, जो कि बेस्ट तरीका है जिससे हम लोग यूजर को एग्जीक्यूटेबल परमिशन ले रहे हैं। फिर datasets.sh। ठीक है? अब यहां पर आप देखिएगा तो ये भी ग्रीन हो गया है। यानी कि अब ये काम करना चाहिए। बट सबसे पहले मैं script.sh रिमूव करूंगा। तो rm script.sh। अब मैं ls करूंगा तो यहां पर आपका datasets.sh आ गया, राइट? अब इसको हम लोग एक बार sync eval करके देख लेते हैं कि ये सही से काम कर रहा है या अभी भी ये ब्रेक हो रहा है। तो मैं लिख देता हूं syncro eval। तो यहां पर कुछ टेस्ट केसेस फेल का बता रहा है, देखते हैं क्या इशू है। दोस्तों, हमारी गलती बहुत सिंपल सी है। मैंने एक छोटी सी गलती यहां पर की थी कि यहां मैंने dollar नहीं डाला। dollar नहीं डाला था तो इसलिए ये वाली चीज काम नहीं कर रही थी। क्योंकि ये फिर लिटरली डेटासेट इस और फिर उसका जो भी ट्रेन टेस्ट वैलिडेशन है, वो आ रहा था। और इस वजह से प्रॉब्लम हो रही थी। तो यहां पर मैं वापस से अब डाल दिया हूं तो ये ऐसा आना चाहिए, DatasetA train metadata.yml। ठीक है? अब इसको सेव कर लेते हैं। इसको सेव कर लेते हैं। एक बार चेक भी कर लेते हैं कि जो हमने जो किया है वो सेव हो गया है। तो मैं लिखूंगा cat datasets.sh। तो यहां पर datasets आ गया। चलिए देखते हैं कि अब ये काम करता है या अभी भी ये ब्रेक हो रहा है। तो मैं लिख देता हूं syncro eval। एंड वी पास्ड द टेस्ट केसेस। तो आप देख सकते हैं कि ये दोनों केसेस पास हो गए। तो ये जो तरीका है, ये थोड़ा हार्ड तरीका है। मैं आपको एक सिंपल तरीका दिखाता हूं जो कि वन लाइनर है और आपको बहुत इजीली हेल्प करेगा चीजों को सॉल्व करने के लिए। क्या करने वाले हैं? हम लोग वापस से अपने इसमें जाने वाले हैं और ये सब जो भी लाइंस हैं, इन सबको हम कमेंट कर देंगे। तो हम लोग यहां पर mkdir + bracket expansion यूज करने वाले हैं। साथ ही साथ हो सकता है टच कमांड भी यूज कर लें। ठीक है? तो मैं सिंपली वो कमांड जो है मैंने ऑलरेडी बना के रखा है तो ऐसे मैं पेस्ट कर देता हूं यहां पे इजी होगा आपको भी समझने के लिए और मुझे भी बताने के लिए। तो ये हमारा कमांड है, ठीक है? थोड़ा सा मैं छोटा कर देता हूं ताकि आपको दिखे। तो यहां पर आप देख सकते हैं mkdir -p Dataset{A..E}/{train,test,validation}/। तो ये क्या करेगा? ये एक्सपैंड होगा A, B, C, D, E तक और फिर A-1 के इंडिविजुअल के अंदर 10 टेस्ट एंड वैलिडेशन स्प्लिट क्रिएट करेगा, ठीक है? जो कि हम लोग यहां पर कर रहे थे, राइट? इस वाले पॉइंट पर। उसके बाद मैं कमांड डाल रहा हूं एंड एंड टच Dataset{A..E}/{train,test,validation}/{README.md,metadata.yml}। यानी कि अब ये जो टच कमांड है, ये पाथ ले रहा है। यहां तक आपका पैरेंट पाथ है, ठीक है? ये पैरेंट पाथ तक है तो यहां पर ये कुछ ऐसा आएगा, Dataset A train, test, validation। फिर Dataset B train, test and validation, इस तरीके से और हर एक के अंदर वो README.md, metadata.yml फाइल क्रिएट करता जाएगा। यानी कि ये वाला जो काम आप यहां पर कर रहे हैं, वो काम आप यहां पर करेंगे, ठीक है? अगेन मैंने इसे कॉपी पेस्ट किया है बट आप इसे खुद से करके देखेंगे तो और ज्यादा जल्दी समझ आएगा। और अगर मैं sync eval करूं तो आप देख सकते हैं कि सारे के सारे टेस्ट केसेस पास हो गए। तो दोस्तों यही चीज है, आपको थोड़ा सा समझना पड़ेगा कि किस तरीके से आप कर सकते हैं। तो इसी के साथ हमारा क्वेश्चन नंबर वन कंप्लीट होता है, हम चलते हैं नेक्स्ट क्वेश्चन की तरफ।

Need another transcript?

Paste any YouTube URL to get a clean transcript in seconds.

Get a Transcript