CNTK - पहला न्यूरल नेटवर्क बनाना

यह अध्याय CNTK में एक तंत्रिका नेटवर्क बनाने के बारे में विस्तार से बताएगा।

नेटवर्क संरचना बनाएँ

हमारे पहले एनएन के निर्माण के लिए CNTK अवधारणाओं को लागू करने के लिए, हम सीएनपी चौड़ाई और लंबाई के भौतिक गुणों और पंखुड़ी की चौड़ाई और लंबाई के आधार पर आईरिस फूलों की प्रजातियों को वर्गीकृत करने के लिए एनएन का उपयोग करने जा रहे हैं। डेटासेट जो हम आईरिस डेटासेट का उपयोग करेंगे जिसमें आइरिस फूलों की विभिन्न किस्मों के भौतिक गुणों का वर्णन किया गया है -

  • सिपाही की लंबाई
  • सिपाही की चौड़ाई
  • पंखुड़ी की लंबाई
  • पेटल की चौड़ाई
  • कक्षा यानी आईरिस सेटोसा या आईरिस वर्सिकोलर या आईरिस वर्जिनिका

यहां, हम एक नियमित एनएन का निर्माण करेंगे, जिसे फीडफोर्वर्ड एनएन कहा जाएगा। आइए, एनएन की संरचना बनाने के लिए कार्यान्वयन कदम देखें -

Step 1 - सबसे पहले, हम आवश्यक घटकों जैसे हमारी परत प्रकार, सक्रियण फ़ंक्शन और एक फ़ंक्शन को आयात करेंगे जो हमें CNTK लाइब्रेरी से हमारे एनएन के लिए एक इनपुट चर को परिभाषित करने की अनुमति देता है।

from cntk import default_options, input_variable
from cntk.layers import Dense, Sequential
from cntk.ops import log_softmax, relu

Step 2- उसके बाद, हम अनुक्रमिक फ़ंक्शन का उपयोग करके अपना मॉडल बनाएंगे। एक बार बनाने के बाद, हम इसे उन परतों के साथ फ़ीड करेंगे जो हम चाहते हैं। यहां, हम अपने एनएन में दो अलग-अलग परतें बनाने जा रहे हैं; एक चार न्यूरॉन्स के साथ और दूसरा तीन न्यूरॉन्स के साथ।

model = Sequential([Dense(4, activation=relu), Dense(3, activation=log_sogtmax)])

Step 3- अंत में, एनएन संकलित करने के लिए, हम नेटवर्क को इनपुट चर से बांध देंगे। इसमें चार न्यूरॉन्स के साथ एक इनपुट परत और तीन न्यूरॉन्स के साथ एक आउटपुट परत है।

feature= input_variable(4)
z = model(feature)

सक्रियण फ़ंक्शन लागू करना

चुनने के लिए बहुत सारे सक्रियण कार्य हैं और सही सक्रियण फ़ंक्शन को चुनने से निश्चित रूप से एक बड़ा अंतर होगा कि हमारा गहन शिक्षण मॉडल कितना अच्छा प्रदर्शन करेगा।

उत्पादन परत पर

चुनना एक activation आउटपुट लेयर पर फ़ंक्शन हमारे मॉडल के साथ जिस तरह की समस्या को हल करने जा रहा है, उस पर निर्भर करेगा।

  • एक प्रतिगमन समस्या के लिए, हमें एक का उपयोग करना चाहिए linear activation function आउटपुट लेयर पर।

  • एक द्विआधारी वर्गीकरण समस्या के लिए, हमें एक का उपयोग करना चाहिए sigmoid activation function आउटपुट लेयर पर।

  • बहु-श्रेणी वर्गीकरण समस्या के लिए, हमें एक का उपयोग करना चाहिए softmax activation function आउटपुट लेयर पर।

  • यहां, हम तीन वर्गों में से एक की भविष्यवाणी के लिए एक मॉडल बनाने जा रहे हैं। इसका मतलब है कि हमें उपयोग करने की आवश्यकता हैsoftmax activation function उत्पादन परत पर।

छिपी हुई परत पर

चुनना एक activation छिपी हुई परत पर कार्य करने के लिए प्रदर्शन की निगरानी के लिए कुछ प्रयोग की आवश्यकता होती है, यह देखने के लिए कि कौन सा सक्रियण फ़ंक्शन अच्छी तरह से काम करता है।

  • एक वर्गीकरण समस्या में, हमें संभावना का अनुमान लगाने की आवश्यकता है कि एक नमूना एक विशिष्ट वर्ग का है। इसलिए हमें ए की जरूरत हैactivation functionयह हमें संभाव्य मूल्य देता है। इस लक्ष्य तक पहुँचने के लिए,sigmoid activation function हमारी मदद कर सकते हैं।

  • सिग्मॉइड फ़ंक्शन से जुड़ी प्रमुख समस्याओं में से एक गायब होने वाली ढाल समस्या है। ऐसी समस्या को दूर करने के लिए, हम उपयोग कर सकते हैंReLU activation function यह सभी नकारात्मक मूल्यों को शून्य तक कवर करता है और सकारात्मक मूल्यों के लिए एक पास-थ्रू फिल्टर के रूप में काम करता है।

एक नुकसान समारोह उठा

एक बार, हमारे पास हमारे एनएन मॉडल के लिए संरचना है, हमें इसे अनुकूलित करना होगा। अनुकूलन के लिए हमें एक की आवश्यकता हैloss function। भिन्नactivation functions, हमारे पास चुनने के लिए बहुत कम नुकसान कार्य हैं। हालांकि, एक हानि फ़ंक्शन चुनना हमारे मॉडल के साथ जिस तरह की समस्या का समाधान करने जा रहा है, उस पर निर्भर करेगा।

उदाहरण के लिए, एक वर्गीकरण समस्या में, हमें एक हानि फ़ंक्शन का उपयोग करना चाहिए जो एक अनुमानित वर्ग और एक वास्तविक वर्ग के बीच अंतर को माप सकता है।

लॉस फंकशन

वर्गीकरण समस्या के लिए, हम अपने एनएन मॉडल के साथ हल करने जा रहे हैं, categorical cross entropyनुकसान समारोह सबसे अच्छा उम्मीदवार है। CNTK में, इसे लागू किया जाता हैcross_entropy_with_softmax जिससे आयात किया जा सकता है cntk.losses पैकेज, निम्नानुसार है

label= input_variable(3)
loss = cross_entropy_with_softmax(z, label)

मैट्रिक्स

हमारे एनएन मॉडल के लिए संरचना और लागू करने के लिए एक हानि फ़ंक्शन होने के साथ, हमारे पास हमारे सभी नए मॉडल को अनुकूलित करने के लिए नुस्खा बनाने की शुरुआत करने के लिए सभी सामग्रियां हैं। लेकिन, इसमें गहरी डुबकी लगाने से पहले, हमें मैट्रिक्स के बारे में सीखना चाहिए।

cntk.metrics

CNTK नाम का पैकेज है cntk.metricsजिससे हम उन मेट्रिक्स को आयात कर सकते हैं जिनका हम उपयोग करने जा रहे हैं। जैसा कि हम एक वर्गीकरण मॉडल का निर्माण कर रहे हैं, हम उपयोग करेंगेclassification_error मैट्रिक जो 0 और 1. के बीच एक संख्या उत्पन्न करेगा, 0 और 1 के बीच की संख्या सही ढंग से अनुमानित नमूनों का प्रतिशत इंगित करती है -

सबसे पहले, हमें मीट्रिक को आयात करना होगा cntk.metrics पैकेज -

from cntk.metrics import classification_error
error_rate = classification_error(z, label)

उपरोक्त फ़ंक्शन को वास्तव में एनएन के आउटपुट और इनपुट के रूप में अपेक्षित लेबल की आवश्यकता है।