CNTK - प्रशिक्षण द न्यूरल नेटवर्क

यहां, हम CNTK में न्यूरल नेटवर्क के प्रशिक्षण के बारे में समझेंगे।

CNTK में एक मॉडल का प्रशिक्षण

पिछले खंड में, हमने गहन शिक्षण मॉडल के सभी घटकों को परिभाषित किया है। अब इसे प्रशिक्षित करने का समय आ गया है। जैसा कि हमने पहले चर्चा की, हम CNTK में NN मॉडल को प्रशिक्षित कर सकते हैंlearner तथा trainer

एक शिक्षार्थी चुनना और प्रशिक्षण स्थापित करना

इस खंड में, हम परिभाषित करेंगे learner। CNTK कई प्रदान करता हैlearnersमें से चुनना। हमारे मॉडल के लिए, पिछले अनुभागों में परिभाषित किया गया है, हम उपयोग करेंगेStochastic Gradient Descent (SGD) learner

तंत्रिका नेटवर्क को प्रशिक्षित करने के लिए, हमें कॉन्फ़िगर करें learner तथा trainer निम्नलिखित चरणों की मदद से -

Step 1 - सबसे पहले, हमें आयात करने की आवश्यकता है sgd से कार्य करते हैं cntk.lerners पैकेज।

from cntk.learners import sgd

Step 2 - इसके बाद, हमें आयात करने की आवश्यकता है Trainer से कार्य करते हैं cntk.train.trainer पैकेज

from cntk.train.trainer import Trainer

Step 3 - अब, हम एक बनाने की जरूरत है learner। इसे बनाकर बनाया जा सकता हैsgd मॉडल के मापदंडों और सीखने की दर के लिए एक मूल्य प्रदान करने के साथ कार्य करते हैं।

learner = sgd(z.parametrs, 0.01)

Step 4 - आखिर में, हमें इसे इनिशियलाइज़ करना होगा trainer। यह नेटवर्क, के संयोजन प्रदान किया जाना चाहिएloss तथा metric इसके साथ learner

trainer = Trainer(z, (loss, error_rate), [learner])

अनुकूलन की गति को नियंत्रित करने वाली सीखने की दर 0.1 से 0.001 के बीच छोटी संख्या होनी चाहिए।

एक शिक्षार्थी चुनना और प्रशिक्षण स्थापित करना - पूरा उदाहरण

from cntk.learners import sgd
from cntk.train.trainer import Trainer
learner = sgd(z.parametrs, 0.01)
trainer = Trainer(z, (loss, error_rate), [learner])

ट्रेनर में डाटा फीड करना

एक बार जब हमने ट्रेनर को चुना और कॉन्फ़िगर किया, तो यह डेटासेट लोड करने का समय है। हमने बचा लिया हैiris डाटासेट के रूप में।CSV फ़ाइल और हम डेटा नामकरण पैकेज का उपयोग करेंगे pandas लोड करने के लिए डेटासेट।

.CSV फ़ाइल से डेटासेट लोड करने के लिए चरण

Step 1 - सबसे पहले, हमें आयात करने की आवश्यकता है pandas पैकेज।

from import pandas as pd

Step 2 - अब, हमें नामांकित फ़ंक्शन को लागू करने की आवश्यकता है read_csv डिस्क से .csv फ़ाइल लोड करने के लिए फ़ंक्शन।

df_source = pd.read_csv(‘iris.csv’, names = [‘sepal_length’, ‘sepal_width’, 
‘petal_length’, ‘petal_width’, index_col=False)

एक बार जब हम डेटासेट लोड कर लेते हैं, तो हमें इसे सुविधाओं के एक सेट और एक लेबल में विभाजित करना होगा।

डेटासेट और लेबल में विभाजित करने के लिए चरण

Step 1- सबसे पहले, हमें सभी पंक्तियों और डेटासेट से पहले चार कॉलमों का चयन करना होगा। इसका उपयोग करके किया जा सकता हैiloc समारोह।

x = df_source.iloc[:, :4].values

Step 2- आगे हमें आईरिस डेटासेट से प्रजाति कॉलम का चयन करना होगा। हम अंतर्निहित तक पहुंचने के लिए मूल्यों की संपत्ति का उपयोग करेंगेnumpy सरणी।

x = df_source[‘species’].values

सांख्यिक वेक्टर प्रतिनिधित्व के लिए प्रजाति कॉलम को एनकोड करने के चरण

जैसा कि हमने पहले चर्चा की थी, हमारा मॉडल वर्गीकरण पर आधारित है, इसके लिए संख्यात्मक इनपुट मूल्यों की आवश्यकता होती है। इसलिए, यहाँ हमें सांख्यिक सदिश निरूपण के लिए प्रजाति कॉलम को एनकोड करना होगा। आइए देखें इसे करने के चरण -

Step 1- पहले, हमें सरणी में सभी तत्वों पर पुनरावृति करने के लिए एक सूची अभिव्यक्ति बनाने की आवश्यकता है। फिर प्रत्येक मान के लिए लेबल_ मैपिंग शब्दकोश में एक प्रदर्शन करें।

label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}

Step 2- इसके बाद, इस परिवर्तित संख्यात्मक मान को एक-हॉट एन्कोडेड वेक्टर में बदलें। हम उपयोग करेंगेone_hot कार्य निम्नानुसार है -

def one_hot(index, length):
result = np.zeros(length)
result[index] = 1
return result

Step 3 - अंत में, हमें इस परिवर्तित सूची को एक में बदलना होगा numpy सरणी।

y = np.array([one_hot(label_mapping[v], 3) for v in y])

ओवरफिटिंग का पता लगाने के लिए कदम

स्थिति, जब आपका मॉडल नमूनों को याद करता है, लेकिन प्रशिक्षण के नमूनों से नियमों को कम नहीं कर सकता है, ओवरफिटिंग है। निम्नलिखित चरणों की मदद से, हम अपने मॉडल पर ओवरफिटिंग का पता लगा सकते हैं -

Step 1 - पहला, से sklearn पैकेज, आयात train_test_split से कार्य करते हैं model_selection मापांक।

from sklearn.model_selection import train_test_split

Step 2 - इसके बाद, हमें train_test_split फ़ंक्शन को x और लेबल y के साथ निम्न प्रकार से लागू करना होगा -

x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0-2, 
stratify=y)

हमने कुल डेटा का 20% अलग सेट करने के लिए 0.2 का एक test_size निर्दिष्ट किया।

label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}

हमारे मॉडल को प्रशिक्षण सेट और सत्यापन सेट खिलाने के लिए कदम

Step 1 - हमारे मॉडल को प्रशिक्षित करने के लिए, सबसे पहले, हम इनवाइट करेंगे train_minibatchतरीका। फिर इसे एक शब्दकोश दें जो इनपुट डेटा को इनपुट वैरिएबल में मैप करता है जिसका उपयोग हमने एनएन और उसके संबंधित नुकसान फ़ंक्शन को परिभाषित करने के लिए किया है।

trainer.train_minibatch({ features: X_train, label: y_train})

Step 2 - अगला, कॉल करें train_minibatch लूप के लिए निम्नलिखित का उपयोग करके -

for _epoch in range(10):
trainer.train_minbatch ({ feature: X_train, label: y_train})
print(‘Loss: {}, Acc: {}’.format(
trainer.previous_minibatch_loss_average,
trainer.previous_minibatch_evaluation_average))

ट्रेनर में डेटा फीड करना - पूरा उदाहरण

from import pandas as pd
df_source = pd.read_csv(‘iris.csv’, names = [‘sepal_length’, ‘sepal_width’, ‘petal_length’, ‘petal_width’, index_col=False)
x = df_source.iloc[:, :4].values
x = df_source[‘species’].values
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
def one_hot(index, length):
result = np.zeros(length)
result[index] = 1
return result
y = np.array([one_hot(label_mapping[v], 3) for v in y])
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0-2, stratify=y)
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
trainer.train_minibatch({ features: X_train, label: y_train})
for _epoch in range(10):
trainer.train_minbatch ({ feature: X_train, label: y_train})
print(‘Loss: {}, Acc: {}’.format(
trainer.previous_minibatch_loss_average,
trainer.previous_minibatch_evaluation_average))

एनएन के प्रदर्शन को मापने

हमारे एनएन मॉडल को अनुकूलित करने के लिए, जब भी हम ट्रेनर के माध्यम से डेटा पास करते हैं, तो यह मीट्रिक के माध्यम से मॉडल के प्रदर्शन को मापता है जिसे हमने ट्रेनर के लिए कॉन्फ़िगर किया था। प्रशिक्षण के दौरान एनएन मॉडल के प्रदर्शन का ऐसा माप प्रशिक्षण डेटा पर है। लेकिन दूसरी ओर, मॉडल प्रदर्शन के पूर्ण विश्लेषण के लिए हमें परीक्षण डेटा का उपयोग करने की आवश्यकता है।

इसलिए, परीक्षण डेटा का उपयोग करके मॉडल के प्रदर्शन को मापने के लिए, हम इसे लागू कर सकते हैं test_minibatch पर विधि trainer निम्नानुसार है -

trainer.test_minibatch({ features: X_test, label: y_test})

एनएन के साथ भविष्यवाणी करना

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

Step 1 - पहले, हमें निम्नलिखित फ़ंक्शन का उपयोग करके परीक्षण सेट से एक यादृच्छिक आइटम लेने की आवश्यकता है -

np.random.choice

Step 2 - इसके बाद, हमें परीक्षण सेट से नमूना डेटा का उपयोग करके चयन करना होगा sample_index

Step 3 - अब, संख्यात्मक आउटपुट को NN में वास्तविक लेबल में बदलने के लिए, एक उलटा मैपिंग बनाएं।

Step 4 - अब, चयनित का उपयोग करें sampleडेटा। एक समारोह के रूप में एनएन जेड को आमंत्रित करके एक भविष्यवाणी करें।

Step 5- अब, एक बार जब आपको पूर्वानुमानित आउटपुट मिल जाता है, तो उस न्यूरॉन के सूचकांक को लें जिसमें अनुमानित मूल्य के रूप में उच्चतम मूल्य होता है। यह का उपयोग करके किया जा सकता हैnp.argmax से कार्य करते हैं numpy पैकेज।

Step 6 - अंत में, इंडेक्स वैल्यू को असली लेबल में बदलकर उपयोग करें inverted_mapping

एनएन के साथ भविष्यवाणी करना - पूरा उदाहरण

sample_index = np.random.choice(X_test.shape[0])
sample = X_test[sample_index]
inverted_mapping = {
   1:’Iris-setosa’,
   2:’Iris-versicolor’,
   3:’Iris-virginica’
}
prediction = z(sample)
predicted_label = inverted_mapping[np.argmax(prediction)]
print(predicted_label)

उत्पादन

उपरोक्त डीप लर्निंग मॉडल को प्रशिक्षित करने और इसे चलाने के बाद, आपको निम्न आउटपुट मिलेगा -

Iris-versicolor