PyTorch का उपयोग करके रैखिक प्रतिगमन

| | | | | | | | | | | | | | | | | | | |

सबसे पहले, आपको अपने पायथन वातावरण में PyTorch को स्थापित करना होगा। ऐसा करने का सबसे आसान तरीका है — pip या conda टूल का उपयोग करें। pytorch.org पर जाएं और अपने पायथन इंटरप्रेटर और पैकेज मैनेजर का वह संस्करण इंस्टॉल करें जिसका आप उपयोग करना चाहते हैं।


# हम इस Python कोड को Jupyter नोटबुक पर चला सकते हैं
# सही वर्जन को अपने आप इंस्टॉल करने के लिए
<कोड वर्ग = "टिप्पणियां"> # PyTorch.


# http://pytorch.org / os आयात पथ से

< से कोड वर्ग = "सादा"> Wheel.pep425tags <कोड वर्ग = "कीवर्ड"> आयात <कोड वर्ग = "सादा"> get_abbr_impl, get_impl_ver, get_abi_tag

मंच <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "स्ट्रिंग"> `{} {} - {}` <कोड वर्ग = "सादा">। <कोड वर्ग = "कार्य आयन"> प्रारूप <कोड वर्ग = "सादा"> (get_abbr_impl (), get_impl_ver (), get_abi_tag ())

त्वरक = `cu80` if path.exists ( `/ ऑप्ट / बिन / एनवीडिया-एसएमआई` <कोड वर्ग = "सादा">) <कोड वर्ग = "कीवर्ड"> अन्य <कोड वर्ग = " string"> `cpu`


<कोड cla एसएस = "सादा">! पाइप स्थापित करें <कोड वर्ग = "कीवर्ड"> - <कोड वर्ग = "सादा"> क्यू http: <कोड वर्ग = "कीवर्ड"> / <कोड वर्ग = "कीवर्ड"> / <कोड वर्ग = "सादा"> download.pytorch.org <कोड वर्ग = "कीवर्ड"> / <कोड वर्ग = "सादा"> whl < /कोड> <कोड वर्ग = "कीवर्ड"> / <कोड वर्ग = "सादा"> {त्वरक} <कोड वर्ग = "कीवर्ड"> / <कोड वर्ग = "सादा" "> मशाल <कोड वर्ग =" कीवर्ड "> - <कोड वर्ग =" मान "> 0.3 <कोड वर्ग = "सादा">। 0.post4 - {platform} - <कोड क्लास = "प्लेन"> linux_x86_64.whl टॉर्चविजन

PyTorch इंस्टाल होने के साथ, चलिए अब कोड को देखें।
आवश्यक पुस्तकालय कार्यों और वस्तुओं को आयात करने के लिए नीचे दो पंक्तियाँ लिखें।


<तालिका सीमा = "0 "सेलपैडिंग =" 0 "सेलस्पेसिंग =" 0 " >

import टॉर्च

<कोड वर्ग = "कीवर्ड"> से <कोड वर्ग = "सादा"> टॉर्च। वेरिएबल

हम कुछ डेटा भी परिभाषित करते हैं और इसे वेरिएबल x_data और y_data, इस प्रकार है:


<कोड वर्ग = "सादा"> x_data <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = " सादा"> चर (मशाल। टेंसर ([[ 1.0 <कोड क्लास = "प्लेन">], [ <कोड क्लास = "वैल्यू"> 2.0 <कोड क्लास = "प्लेन">], [ 3.0 ]]))

y_data = Variable (torch.Tensor ([[ 2.0 ) <कोड वर्ग = "सादा">], [ <कोड वर्ग = "मान"> 4.0 <कोड वर्ग = "सादा">], [ <कोड वर्ग = "मान" > 6.0 <कोड वर्ग = "सादा">]]))

यहां x_data & #8212; हमारा स्वतंत्र चर, और y_data — हमारे आश्रित चर। यह अभी के लिए हमारा डेटासेट होगा। अगला, हमें अपने मॉडल को परिभाषित करने की आवश्यकता है। हमारे मॉडल को परिभाषित करने में दो मुख्य चरण शामिल हैं। वे हैं:

  1. हमारे मॉडल को प्रारंभ करना।
  2. फॉरवर्ड पास घोषित करना।

हम निम्न वर्ग का उपयोग करते हैं:

class LinearRegressionModel (torch.nn.Module):


def __ init __ ( self ):

super <कोड वर्ग = "सादा"> (LinearRegressionModel, self ) .__ init __ ()

<कोड वर्ग ="अपरिभाषित रिक्त स्थान"> self . रैखिक <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> मशाल। एनएन। रैखिक ( <कोड वर्ग = "मान"> 1 < कोड वर्ग = "सादा">, <कोड वर्ग = "मान"> 1 <कोड वर्ग = "सादा">) <कोड वर्ग = "टिप्पणियां"> # एक इनपुट और एक निकास


def आगे ( स्वयं <कोड वर्ग = "सादा">, x):

कोड वर्ग = "सादा"> y_pred <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "रंग 1"> स्वयं <कोड वर्ग = "सादा">। रैखिक (x)

<कोड वर्ग = "कीवर्ड"> वापसी <कोड वर्ग = "सादा"> y_pred

जैसा कि आप देख सकते हैं, हमारा मॉडल वर्ग torch.nn.module का एक उपवर्ग है। इसके अलावा, चूंकि हमारे यहां केवल एक इनपुट और एक आउटपुट है, इसलिए हम 1 के इनपुट और आउटपुट आकार के साथ एक रैखिक मॉडल का उपयोग करते हैं। इसके बाद, हम इस मॉडल का एक ऑब्जेक्ट बनाते हैं।

# हमारा मॉडल

our_model = <कोड वर्ग = "सादा"> LinearRegressionModel ()

उसके बाद एक अनुकूलक चुनें और हानि मानदंड। यहाँ हम माध्य चुकता त्रुटि (MSE) को हमारे हानि फलन के रूप में और Stochastic Gradient Descent (SGD) को हमारे अनुकूलक के रूप में उपयोग करेंगे। हम सीखने की दर को भी मनमाने ढंग से 0.01 पर तय करते हैं।


<टेबल बॉर्डर = "0" सेलपैडिंग = "0" सेलस्पेसिंग = " 0 ">

<कोड वर्ग ="सादा"> मानदंड <कोड वर्ग ="कीवर्ड "> = <कोड वर्ग = "सादा"> टॉर्च.एनएन.MSELoss (आकार_औसत <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "रंग 1"> गलत <कोड वर्ग = "सादा">)

<कोड वर्ग = "सादा"> अनुकूलक <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> टॉर्च। ऑप्टिम। एसजीडी (our_model.parameters (), lr <कोड) क्लास = "कीवर्ड"> = <कोड क्लास = "वैल्यू"> 0.01 <कोड क्लास = "प्लेन">)

p>

अब हम अपने सीखने के चरण में आते हैं। हम प्रशिक्षण के दौरान 500 बार निम्नलिखित कार्य करते हैं:

  1. हमारे डेटा में पास करके और अनुमानित y मान का पता लगाकर लाइव स्थानांतरण करें।
  2. एमएसई का उपयोग करके नुकसान की गणना करें।
  3. सभी ग्रेडिएंट्स को 0 पर रीसेट करें, बैक प्रोपेगेट करें और फिर वेट अपडेट करें।

युग में <कोड वर्ग = "कार्य"> श्रेणी <कोड वर्ग = "सादा"> ( <कोड वर्ग = "मान"> 500 <कोड वर्ग = "सादा">):


# फॉरवर्ड पास:

मॉडल के लिए #x

<कोड वर्ग = "सादा"> pred_y <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> our_model (x_data)


< कोड वर्ग = "अपरिभाषित रिक्त स्थान"> <कोड वर्ग =" टिप्पणियाँ "> # गणना करें और प्रिंट खो दें

loss = मानदंड (pred_y, y_data)


# जीरो ग्रेडिएंट्स, बैकट्रैक

# और वेट अपडेट करें।

Optimizer.zero_grad ()

loss.backward ()

अनुकूलक.स्टेप ()

प्रिंट <कोड क्लास = "पीएलए इन "> ( <कोड क्लास = "स्ट्रिंग"> `एपोच {}, लॉस {} ` <कोड क्लास =" प्लेन ">। <कोड वर्ग = "कार्य"> प्रारूप <कोड वर्ग = "सादा"> (युग, हानि। डेटा [ <कोड वर्ग = "मान"> 0 ]))

प्रशिक्षण पूरा करने के बाद हम जांचते हैं कि हमें सही परिणाम मिल रहे हैं या नहीं मॉडल जिसे हमने परिभाषित किया है। इसलिए हम इसे एक अज्ञात x_data मान के लिए जाँचते हैं, इस मामले में 4.0।


new_var < कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> चर (मशाल। टेंसर ([[[ <कोड वर्ग = "मान"> 4.0 <कोड वर्ग = "सादा">]]))

<कोड वर्ग = "सादा"> pred_y <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = " प्लेन"> Our_model (new_var)

Print ( "पूर्वानुमान (प्रशिक्षण के बाद)" <कोड वर्ग =" सादा ">, <कोड वर्ग =" मान "> 4 <कोड वर्ग =" सादा ">, Our_model ( new_var) .data [ 0 ] [ 0 ])

यदि आपने सभी चरणों का सही ढंग से पालन किया है, तो आप देखेंगे कि प्रविष्टि 4.0 के लिए आपको एक मूल्य 8.0 के बहुत करीब है, जैसा कि नीचे दिखाया गया है। इस प्रकार, हमारा मॉडल अनिवार्य रूप से स्पष्ट प्रोग्रामिंग के बिना इनपुट और आउटपुट के बीच संबंध सीखता है।

पूर्वानुमान (प्रशिक्षण के बाद) 4 7.966438293457031

संदर्भ के लिए, आप इस लेख के लिए सभी कोड नीचे दिए गए हैं:


<कोड वर्ग = "कीवर्ड"> आयात <कोड वर्ग = "सादा"> मशाल p>

<कोड वर्ग = "कीवर्ड"> से "सादा"> चर

<कोड वर्ग =" अपरिभाषित रिक्त स्थान ">

< कोड वर्ग =" सादा "> x_data < कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> चर (मशाल। टेंसर ([[ <कोड वर्ग = "मान"> 1.0 <कोड वर्ग = " सादा">], [ <कोड वर्ग =" मान "> 2.0 <कोड वर्ग =" सादा ">], [ <कोड वर्ग = "मान"> 3.0 <कोड वर्ग = "सादा">]]))

<कोड वर्ग = "सादा"> y_data <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> वी ariable (मशाल। टेंसर ([[ 2.0 ], [ 4.0 ], [ 6.0 ]]))



class LinearRegressionModel (torch.nn.Module):


<कोड वर्ग = "कीवर्ड"> def <कोड वर्ग = "सादा"> __ init __ ( <कोड वर्ग = "रंग 1"> स्वयं <कोड वर्ग = "सादा">):

सुपर (LinearRegressionModel, स्वयं <कोड वर्ग = "सादा">) .__ init __ ()

<कोड वर्ग = "रंग 1"> स्वयं <कोड वर्ग = "सादा">। रैखिक <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> मशाल। एनएन। रैखिक ( <कोड वर्ग = "मान"> 1 < कोड वर्ग = "सादा">, <कोड वर्ग = "मान"> 1 <कोड वर्ग = "सादा">) <कोड वर्ग = "टिप्पणियां"> # एक इनपुट और एक आउटपुट


def आगे ( स्वयं <कोड वर्ग = "सादा">, x):

कोड वर्ग = "सादा"> y_pred <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "रंग 1"> स्वयं <कोड वर्ग = "सादा">। रैखिक (x)

<कोड वर्ग = "कीवर्ड"> वापसी <कोड वर्ग = "सादा"> y_pred


# हमारा मॉडल

our_model = LinearRegressionModel ()

मानदंड = <कोड वर्ग = "सादा"> टॉर्च.एनएन.एमएसईलॉस (आकार_औसत <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "रंग 1"> गलत < कोड वर्ग = "सादा">)

कोड वर्ग = "सादा"> अनुकूलक <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = " सादा"> मशाल। ऑप्टिम। SGD (our_model.parameters (), lr = 0.01 ) code>


<कोड वर्ग = "कीवर्ड"> के लिए <कोड वर्ग = "सादा"> युग <कोड वर्ग = "कीवर्ड"> <कोड वर्ग = "फ़ंक्शंस"> श्रेणी <कोड वर्ग = "सादा"> ( <कोड वर्ग = "मान"> 500 <कोड वर्ग = "सादा">):

# फॉरवर्ड पास: पासिंग द्वारा प्रेडिक्टेड y की गणना करें कोड>

<कोड वर्ग = "अपरिभाषित रिक्त स्थान"> <कोड वर्ग = "टिप्पणियां"> # —Ö मॉडल के लिए

कोड वर्ग = "सादा"> pred_y <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> our_model (x_data)


< कोड वर्ग = "टिप्पणियां"> # गणना करें और प्रिंट खो दें

<कोड वर्ग ="सादा "> हानि <कोड वर्ग ="कीवर्ड"> = < कोड वर्ग = "सादा"> मानदंड (pred_y, y_data)


<कोड वर्ग = "c omments"> # शून्य ग्रेडिएंट, बैक पास,

# और वज़न अपडेट करें।

अनुकूलक.zero_grad ()

<कोड वर्ग = "अपरिभाषित रिक्त स्थान" > <कोड वर्ग = "सादा"> loss.backward ()

<कोड वर्ग = "अपरिभाषित रिक्त स्थान" > <कोड वर्ग = "सादा"> अनुकूलक। चरण ()

कोड वर्ग = "कीवर्ड "> प्रिंट <कोड वर्ग = "सादा"> ( <कोड वर्ग = "स्ट्रिंग"> `युग {}, हानि {}` <कोड वर्ग = "सादा">। format (युग, loss.data [ 0 < कोड वर्ग = "सादा">]))


<कोड वर्ग = "सादा"> new_var <कोड वर्ग = "कीवर्ड"> = <कोड वर्ग = "सादा"> चर (मशाल। टेंसर ([[ <कोड वर्ग = "मान"> 4.0 <कोड वर्ग = "सादा">]])) /p>

pred_y = our_model (new_var)

<कोड वर्ग = "कीवर्ड"> प्रिंट <कोड वर्ग = "सादा"> ( <कोड वर्ग = "स्ट्रिंग"> "पूर्वानुमान (प्रशिक्षण के बाद)" <कोड वर्ग = "सादा">, <कोड वर्ग = "मान"> 4 <कोड वर्ग = "सादा">, our_model (new_var) .डेटा [ <कोड वर्ग = "मान"> 0 <कोड वर्ग = "सादा">] [ <कोड वर्ग = "मान"> 0 <कोड वर्ग = "सादा">])

लिंक