میں نے اس ٹینسرفلو ٹیوٹوریل کو پیشہ ور افراد اور شائقین کے لئے ڈیزائن کیا ہے جو مختلف مسائل کو حل کرنے کے ل T ٹینسرفلو کا استعمال کرتے ہوئے ڈیپ لرننگ الگورتھم کا اطلاق کرنے میں دلچسپی رکھتے ہیں۔ ٹینسرفلو ایک کھلا ذریعہ گہری سیکھنے والی لائبریری ہے جو عمارتوں کے ماڈل کے لئے ڈیٹا فلو گراف کے تصور پر مبنی ہے۔ یہ آپ کو بہت سے تہوں کے ساتھ بڑے پیمانے پر اعصابی نیٹ ورک بنانے کی سہولت دیتا ہے۔اس لائبریری کا استعمال سیکھنا بھی اس کا بنیادی جز ہے .مندرجہ ذیل عنوانات ہیں جن کے بارے میں اس ٹینسرفلو سبق بلاگ میں زیر بحث آئے گا:
ایک سیٹ بنانے کے لئے کس طرح
- ٹینسرفلو کیا ہے؟
- ٹینسرفلو کوڈ کی بنیادی باتیں
- ٹینسرفلو یوز کیس
ٹینسر کیا ہیں؟
اس ٹینسرفلو ٹیوٹوریل میں ، ٹینسرفلو کے بارے میں بات کرنے سے پہلے ، آئیے پہلے سمجھیں ٹینسر کیا ہیں؟ . گہری سیکھنے میں اعداد و شمار کی نمائندگی کرنے کے لئے ٹینسرز ایک اور حقیقت کے سوا کچھ نہیں ہیں۔
جیسا کہ مذکورہ تصویر میں دکھایا گیا ہے ، ٹینسر صرف کثیر جہتی صفیں ہیں ، جس سے آپ اعداد و شمار کو اعلی طول و عرض کی نمائندگی کرسکتے ہیں۔ عام طور پر ، گہری سیکھنے آپ اعلی جہتی ڈیٹا سیٹوں سے نمٹتے ہیں جہاں جہتیں ڈیٹا سیٹ میں موجود مختلف خصوصیات کا حوالہ دیتے ہیں۔ دراصل ، نام 'ٹینسرفلو' ان کارروائیوں سے اخذ کیا گیا ہے جو اعصابی نیٹ ورک ٹینسرز پر انجام دیتے ہیں۔ یہ در حقیقت دینیوں کا بہاؤ ہے۔ چونکہ ، آپ سمجھ گئے ہیں کہ ٹینسر کیا ہیں ، آئیے ہم اس ٹینسرفلو ٹیوٹوریل میں آگے بڑھیں اور سمجھیں - ٹینسرفلو کیا ہے؟
ٹینسرفلو کیا ہے؟
ٹینسرفلو ایک لائبریری ہے جو ازگر پر مبنی ہے جو ڈیپ لرننگ ماڈلز کے نفاذ کے لئے مختلف قسم کی فعالیت مہیا کرتی ہے۔ جیسا کہ پہلے زیر بحث آیا ، ٹینسرفلو کی اصطلاح دو اصطلاحات پر مشتمل ہے۔ ٹینسر اینڈ فلو:
ٹینسرفلو میں ، ٹینسر کی اصطلاح سے مراد اعداد و شمار کی کثیر جہتی صف کی نمائندگی ہے جبکہ اصطلاح کی روانی سے مراد وہ کارروائیوں کا سلسلہ ہے جو ایک شخص ٹینسرس پر انجام دیتا ہے جیسا کہ مندرجہ بالا تصویر میں دکھایا گیا ہے۔
اب ہم نے ٹینسرفلو کے بارے میں کافی پس منظر کا احاطہ کیا ہے۔
اگلا ، اس ٹینسرفلو ٹیوٹوریل میں ہم ٹینسرفلو کوڈ بیسکس کے بارے میں تبادلہ خیال کریں گے۔
ٹینسرفلو سبق: کوڈ کی بنیادی باتیں
بنیادی طور پر ، ٹینسرفلو پروگرام لکھنے کے مجموعی عمل میں دو مراحل شامل ہیں:
- ایک کمپیوٹیشنل گراف بنانا
- ایک کمپیوٹیشنل گراف چل رہا ہے
ایک ایک کرکے میں آپ کو مندرجہ بالا دو مراحل کی وضاحت کرتا ہوں:
1. ایک کمپیوٹیشنل گراف کی تعمیر
تو ، ایک کمپیوٹیشنل گراف کیا ہے؟ ٹھیک ہے ، ایک کمپیوٹیشنل گراف ٹینسرفلو کارروائیوں کا ایک سلسلہ ہے جو گراف میں نوڈس کے طور پر ترتیب دیا گیا ہے۔ ہر نوڈس 0 یا زیادہ ٹینسرز کو ان پٹ کے طور پر لیتے ہیں اور آؤٹ پٹ کے طور پر ٹینسر تیار کرتے ہیں۔ میں آپ کو ایک سادہ کمپیوٹیشنل گراف کی ایک مثال پیش کرتا ہوں جو تین نوڈس پر مشتمل ہوتا ہے۔ کرنے کے لئے ، b اور c جیسا کہ نیچے دکھایا گیا ہے:
مندرجہ بالا کمپیوٹیشنل گراف کی وضاحت:
مستقل نوڈسمستقل اقدار کو ذخیرہ کرنے کے لئے استعمال کیا جاتا ہے کیونکہ یہ صفر ان پٹ لیتا ہے ، لیکن ذخیرہ شدہ اقدار کو آؤٹ پٹ کے طور پر تیار کرتا ہے۔ مذکورہ بالا مثال میں ، الف اور بی مستقل نوڈس ہیں جن کی بالترتیب 5 اور 6 قدر ہیں۔
- نوڈ سی ضرب لگانے والے مستقل نوڈ اے کے ساتھ بی کے ساتھ عمل کی نمائندگی کرتا ہے۔ لہذا ، نوڈ c کو پھانسی دینے کے نتیجے میں کانسٹ نوڈ اے اور بی کی ضرب ہوگی۔
بنیادی طور پر ، کوئی حسابی گراف کے بارے میں سوچ سکتا ہے کہ ریاضی کے حساب کو تصور کرنے کا ایک متبادل طریقہ ہے جو ٹینسرفلو پروگرام میں ہوتا ہے۔ کمپیوٹیشنل گراف کے مختلف نوڈس کو تفویض کردہ کاروائی متوازی طور پر انجام دی جاسکتی ہے ، اس طرح کمپیوٹیشن کے معاملے میں بہتر کارکردگی مہیا کی جاسکتی ہے۔
یہاں ہم صرف گنتی کی وضاحت کرتے ہیں ، اس میں کسی بھی چیز کی گنتی نہیں کی جاتی ہے ، اس میں کوئی قدر نہیں ہوتی ہے ، یہ صرف آپ کے کوڈ میں بیان کردہ کارروائیوں کی وضاحت کرتی ہے۔
2. ایک کمپیوٹیشنل گراف چلانا
آئیے ہم کمپیوٹیشنل گراف کی سابقہ مثال لیں اور سمجھیں کہ اس کو کس طرح عمل میں لایا جائے۔ پچھلی مثال کے کوڈ کو درج ذیل ہے:
مثال 1:
TF کے بطور ٹینسور فلو درآمد کریں # گراف بنائیں a = tf.constant (5.0) b = tf.constant (6.0) c = a * b
اب ، نوڈ سی کی پیداوار حاصل کرنے کے ل we ، ہمیں a کے اندر کمپیوٹیشنل گراف چلانے کی ضرورت ہے اجلاس . سیشن گراف آپریشنز کو آلات پر رکھتا ہے ، جیسے سی پی یو یا جی پی یو ، اور ان پر عملدرآمد کے طریقے مہیا کرتے ہیں۔
ایک سیشن میں ٹینسرفلو رن ٹائم کے کنٹرول اور حالت کی گنجائش ہے یعنی وہ اس آرڈر کے بارے میں معلومات کو محفوظ کرتی ہے جس میں تمام کاروائیاں کی جائیں گی اور پائپ لائن میں اگلے آپریشن میں پہلے ہی کمپیوٹڈ آپریشن کا نتیجہ گزر جاتا ہے۔ ایک سیشن میں مندرجہ بالا کمپیوٹیشنل گراف چلانے کا طریقہ آپ کو دکھاتا ہوں (کوڈ کی ہر لائن کی وضاحت ایک تبصرہ کے طور پر شامل کی گئی ہے):
# سیشن آبجیکٹ سیس = ٹی ایف تشکیل دیں۔ سیشن () # سیشن میں گراف چلائیں اور آؤٹ پٹ کو متغیر آؤٹ پٹ (c) میں محفوظ کریں (سی) # نوڈ سی پرنٹ کی آؤٹ پٹ پرنٹ کریں (آؤٹ پٹ_ سی) # سیشن کو بند کریں کچھ وسائل کو آزاد کریں sess.close ()
آؤٹ پٹ: 30
تو ، یہ سب سیشن اور اس کے اندر ایک کمپیوٹیشنل گراف چلانے کے بارے میں تھا۔ اب ، ہم متغیرات اور جگہ داروں کے بارے میں بات کریں جو ہم ٹینسرفلو کا استعمال کرتے ہوئے گہری سیکھنے کے ماڈل کی تعمیر کے دوران بڑے پیمانے پر استعمال کریں گے۔
مستقل ، پلیس ہولڈر اور متغیرات
ٹینسرفلو میں ، گہری سیکھنے والے ماڈل کے مختلف پیرامیٹرز کی نمائندگی کرنے کے لئے مستقل ، پلیس ہولڈرز اور متغیرات کا استعمال کیا جاتا ہے۔ چونکہ ، میں نے پہلے ہی اس پر مستقل بحث کی ہے ، لہذا میں پلیس ہولڈرز سے شروع کروں گا۔
پلیس ہولڈر:
ٹینسرفلو مستقل آپ کو کسی قدر کو ذخیرہ کرنے کی اجازت دیتا ہے لیکن ، اگر آپ اپنے نوڈس کو بھاگتے ہوئے ان پٹس لینا چاہتے ہیں تو ، کیا ہوگا؟ اس طرح کی فعالیت کے ل place ، پلیس ہولڈرز استعمال کیے جاتے ہیں جو آپ کے گراف کو پیرامیٹر کے طور پر بیرونی آدانوں کو لینے کی اجازت دیتا ہے۔ بنیادی طور پر ، ایک پلیس ہولڈر بعد میں یا رن ٹائم کے دوران ایک قیمت فراہم کرنے کا وعدہ ہے۔ چیزوں کو آسان بنانے کے ل make میں آپ کو ایک مثال پیش کرتا ہوں:
tns کے طور پر ٹینسر فلو درآمد کریں # جگہ دار بنانا a = tf۔ پلیس ہولڈر (tf.float32) b = tf۔ پلیس ہولڈر (tf.float32) # ضرب عضب تفویض کرنا w.r.t. a & ampamp b to node mul mul = a * b # سیشن آبجیکٹ سییس بنائیں = ٹی ایف۔ سیشن () # اقدار کو پاس کرتے ہوئے مول پر عمل درآمد [1، 3] [2، 4] بالترتیب a = b آؤٹ پٹ = سییس ڈاٹ آرون ( مول ، {ا: [1،3] ، بی: [2 ، 4] print) پرنٹ ('ضرب عضب:' ، آؤٹ پٹ)
آؤٹ پٹ: [2. 12]
یاد رکھنے کے لئے نکات جگہ دار:
- پلیس ہولڈرز شروع نہیں کیے گئے ہیں اور اس میں کوئی ڈیٹا نہیں ہے۔
- کسی کو پلیس ہولڈر کو ان پٹ یا فیڈ فراہم کرنا چاہئے جو رن ٹائم کے دوران سمجھا جاتا ہے۔
- کسی ان پٹ کے بغیر کسی پلیس ہولڈر کو پھانسی دینا ایک خرابی پیدا کرتا ہے۔
اب ، ہم آگے بڑھیں اور سمجھیں - متغیرات کیا ہیں؟
متغیرات
گہری سیکھنے میں ، پلیس ہولڈرز کو آپ کے ماڈل یا گراف میں صوابدیدی ان پٹس لینے کے لئے استعمال کیا جاتا ہے۔ ان پٹ لینے کے علاوہ ، آپ کو گراف میں اس طرح ترمیم کرنے کی بھی ضرورت ہے کہ یہ نئی آؤٹ پٹس تیار کرسکے w.r.t. ایک ہی آدانوں. اس کے ل you آپ متغیرات کا استعمال کریں گے۔ مختصرا. ، ایک متغیر کی مدد سے آپ کو ایسے پیرامیٹرز یا نوڈ کو گراف میں شامل کرنے کی اجازت ملتی ہے جو تربیت پذیر ہوتے ہیں یعنی ایک مدت کے دوران قدر میں ترمیم کی جاسکتی ہے۔ متغیرات کی ابتدائی قیمت اور قسم فراہم کرتے ہوئے بیان کیا جاتا ہے جیسا کہ ذیل میں دکھایا گیا ہے:
var = tf. متغیر ([0.4] ، dtype = tf.float32)
نوٹ:
- اگر آپ نے ڈیٹا کی قسم کو واضح طور پر فراہم نہیں کیا ہے تو ، ٹینسرفلو ابتدائی قیمت سے مستقل / متغیر کی قسم کا پتہ لگائے گا۔
- ٹینسرفلو میں اپنی طرح کی ڈیٹا کی بہت سی قسمیں ہیں tf.float32 ، tf.int32 وغیرہ آپ ان سب کا حوالہ دے سکتے ہیں یہاں .
جب آپ کال کریں تو مستقل کی شروعات کی جاتی ہے tf.constant ، اور ان کی قدر کبھی نہیں بدل سکتی۔ اس کے برعکس ، جب آپ کال کرتے ہیں تو متغیرات شروع نہیں کی جاتی ہیں tf.Wariable . ٹینسرفلو پروگرام میں تمام متغیرات کو شروع کرنے کے ل you ، آپ لازمی واضح طور پر ایک خصوصی آپریشن کال کریں جیسا کہ ذیل میں دکھایا گیا ہے:
init = tf.global_variables_initializer () sess.run (init)
ہمیشہ یاد رکھیں کہ پہلی بار گراف کے استعمال سے پہلے متغیر کو شروع کرنا ضروری ہے۔
نوٹ: ٹینسرفلو متغیر ان میں میموری بفر ہوتے ہیں جن میں ٹینسر ہوتے ہیں ، لیکن عام ٹینسروں کے برعکس جب صرف گراف چلنے پر فوری طور پر چلایا جاتا ہے اور فوری طور پر اس کے بعد حذف ہوجاتا ہے تو ، متغیرات گراف کے متعدد پھانسیوں میں زندہ رہ سکتے ہیں۔
اب جب ہم نے ٹینسرفلو کی کافی بنیادی باتوں کا احاطہ کیا ہے ، آئیے ہم آگے بڑھیں اور یہ سمجھیں کہ ٹینسرفلو کا استعمال کرتے ہوئے لکیری رجعت ماڈل کو کیسے نافذ کیا جائے۔
ٹینسرفلو کا استعمال کرتے ہوئے لکیری ریگریشن ماڈل
لکیری ریگریشن ماڈل کسی دوسرے متغیر (آزاد متغیر) کی معلوم قدر سے کسی متغیر (منحصر متغیر) کی نامعلوم قیمت کی پیشن گوئی کرنے کے لئے استعمال کیا جاتا ہے جیسا کہ ذیل میں دکھایا گیا ہے:
لہذا ، لکیری ماڈل بنانے کے ل you ، آپ کی ضرورت ہے:
- منحصر یا آؤٹ پٹ متغیر (Y)
- ڈھلا متغیر (ڈبلیو)
- Y - انٹرسیپٹ یا تعصب (b)
- آزاد یا ان پٹ متغیر (X)
تو ، آئیے ہم ٹینسرفلو کا استعمال کرتے ہوئے لکیری ماڈل کی تعمیر شروع کریں۔
نیچے دیئے گئے بٹن پر کلک کرکے کوڈ کو کاپی کریں:
# پیرامیٹر ڈھلوان (W) کے لئے ابتدائی قدر کے ساتھ متغیر کی تشکیل 0.4 W = tf.Wariable ([. 4]، tf.float32) # پیرامیٹر تعصب (b) کے لئے متغیر کی تشکیل کرنا ابتدائی ویلیو کے ساتھ -0.4 b = tf. متغیر ( [-0.4] ، tf.float32) # ان پٹ یا آزاد متغیر کی فراہمی کے لئے پلیس ہولڈرز کی تشکیل ، xx = tf. placeholder (tf.float32) کے ذریعہ اشارہ کیا جاتا ہے # لکیری ریگریشن کا مساوات linear_model = W * x + b # تمام متغیرات کو شروع کرنا sess = tf.Session () init = tf.global_variables_initializer () sess.run (init) # آؤٹ پٹ آرٹ کا حساب لگانے کیلئے رجریشن ماڈل چل رہا ہے فراہم کردہ ایکس ویلیوز پرنٹ کرنے کے لئے (sess.run (linear_model {x: [1، 2، 3، 4]}))
آؤٹ پٹ:
[0. 0.40000001 0.80000007 1.20000005]
مذکورہ بالا کوڈ صرف رجعت پسندی کے ماڈل کے نفاذ کے پیچھے بنیادی خیال کی نمائندگی کرتا ہے یعنی آپ رجعت لائن کی مساوات پر کس طرح عمل کرتے ہیں تاکہ آؤٹ پٹ مل سکے w.r.t. ان پٹ اقدار کا ایک مجموعہ۔ لیکن ، اس ماڈل میں ایک اور رجعت پسند ماڈل بننے کے لئے اور بھی دو چیزیں شامل کرنے باقی ہیں:
- پہلے ، ہمیں ایک ایسا طریقہ کار مہیا کرنے کی ضرورت ہے جس کے ذریعہ ہمارا ماڈل خود بخود تربیت دے سکتا ہے جو دیئے گئے آؤٹس اور متعلقہ آؤٹ پٹس کے سیٹ پر مبنی ہوتا ہے۔
- دوسری چیز جس کی ہمیں ضرورت ہے وہ یہ ہے کہ ہمارے ٹرینڈ ماڈل کو ایکس ویلیوز کے دیئے گئے سیٹ کی بنیاد پر مطلوبہ یا ٹارگٹ آؤٹ پٹ کے ساتھ اس کے آؤٹ پٹ کا موازنہ کرکے اس کی تصدیق کی جائے۔
اب آئیے ہم سمجھیں کہ میں کس طرح رجسٹریشن ماڈل کے لئے اپنے کوڈ میں مذکورہ بالا خصوصیات کو شامل کرسکتا ہوں۔
نقصان کی تقریب - ماڈل کی توثیق
نقصان کا فنکشن اس پیمائش کرتا ہے کہ ماڈل کی موجودہ پیداوار مطلوبہ یا ہدف آؤٹ پٹ سے کتنا دور ہے۔ میں اپنے لکیری ریگریشن ماڈل کے لئے سب سے زیادہ عام طور پر استعمال ہونے والا نقصان کا فنکشن استعمال کروں گا جس کو Sum of Square نقص یا SSE کہا جاتا ہے۔ ایس ایس ای کا حساب کتاب w.r.t. ماڈل آؤٹ پٹ (لکیری_موڈل کے ذریعہ نمائندگی کریں) اور مطلوبہ یا ہدف آؤٹ پٹ (y) بطور:
y = tf. جگہ ہولڈر (tf.float32) غلطی = لکیری_موڈیل - y اسکوائرڈ_رئیرز = tf.square (خرابی) نقصان = tf.reduce_sum (مربع_قائد) پرنٹ (sess.run (نقصان، {x: [1،2،3،4 ] ، y: [2 ، 4 ، 6 ، 8]})
آؤٹ پٹ: 90.24
جیسا کہ آپ دیکھ سکتے ہیں ، ہمیں نقصان کی اونچی قیمت مل رہی ہے۔ لہذا ، ہمیں اپنے وزن (W) اور تعصب (b) کو ایڈجسٹ کرنے کی ضرورت ہے تاکہ جو غلطی موصول ہو رہی ہے اسے کم کرسکیں۔
tf.train API - ماڈل کی تربیت کرنا
ٹینسرفلو فراہم کرتا ہے آپٹیمائزر جو نقصان یا افعال کو کم سے کم کرنے کے ل slowly ہر متغیر کو آہستہ آہستہ تبدیل کرتا ہے۔ سب سے آسان آپٹائائزر ہے میلان نزول . یہ اس متغیر کے سلسلے میں ہر متغیر کو نقصان کی ماخوذ کی وسعت کے مطابق تبدیل کرتا ہے۔
# تدریجی نزاع آپٹیمائزر آپٹیمائزر = tf.train. GradientDescentOptimizer (0.01) ٹرین = optizer.minimize (نقصان) میں حد (1000) میں: sess.run (ٹرین ، {x: [1 ، 2 ، 3 ، 4] ، y: [2 ، 4 ، 6 ، 8] print) پرنٹ (sess.run ([W ، b]))
آؤٹ پٹ: [سرنی ([1.99999964]، dtype = float32)، سرنی ([9.86305167e-07]، dtype = float32)]
لہذا ، اس طرح آپ ٹینسرفلو کا استعمال کرتے ہوئے ایک لکیری ماڈل بناتے ہیں اور مطلوبہ آؤٹ پٹ حاصل کرنے کے لئے اسے تربیت دیتے ہیں۔
اب جب آپ ڈیپ لرننگ کے بارے میں جانتے ہو ، اس کو چیک کریں ایڈوریکا کے ذریعہ ، ایک قابل اعتماد آن لائن سیکھنے والی کمپنی جس کی دنیا بھر میں 250،000 سے زیادہ مطمئن سیکھنے والوں کا نیٹ ورک موجود ہے۔ ٹینسرفلو سرٹیفیکیشن ٹریننگ کورس کے ساتھ ایڈیورکا ڈیپ لرننگ سیکھنے کو ریئل ٹائم پروجیکٹس اور اسائنمنٹس کے ساتھ ساتھ سافٹ میکس فنکشن ، آٹو انکوڈر نیورل نیٹ ورکس ، ممنوعہ بولٹزمان مشین (آر بی ایم) جیسے تصورات کے ساتھ تربیت اور بنیادی اور مجازی عصبی نیٹ ورک کو بہتر بنانے میں مدد فراہم کرتا ہے۔
ہمارے لئے ایک سوال ہے؟ برائے کرم اس کا تذکرہ سیکشن میں ذکر کریں اور ہم آپ کو واپس ملیں گے۔