ساخت شبکه در تنسورفلو
در جلسه دوم آموزش تنسورفلو دو عامل دادهها (Tensor) و شبکه (Flow) را پارامترهای مهم در برنامهنویسی تنسورفلو معرفی کردیم. در پنج جلسه گذشته، بر اساس همین دو عامل بود که آموزش تنسورفلو را پیش بردیم؛ یعنی، ابتدا به نحوه تعریف دادهها مانند نحوه تعریف متغیرها (جلسه سوم) و تعریف آرایهها (جلسه چهارم) پرداختیم. بعد از اینکه نحوه تعریف دادهها را یاد گرفتیم، باید میآموختیم که گراف یا شبکه مدنظرمان را بسازیم. برای ساختن گراف یا شبکه نیاز داریم عملیات جبری در تنسورفلو را یاد بگیریم که بههمین دلیل جلسه پنجم را به عملیات جبری در تنسورفلو اختصاص دادیم. حال، آمادهایم که در تنسورفلو گراف یا شبکه بسازیم و برای شبکه سادهمان ورودی تعریف کنیم و خروجیهایش را مشاهده کنیم. البته، هنوز زمان مناسبی برای ساخت شبکههای عصبی مانند شبکههای کانولوشنی نیست و در این جلسه میخواهیم درمورد گرافهای کوچک و ساده با عملیات جبری در قالب یک مثال توضیح دهیم. با ششمین جلسه آموزش تنسورفلو یعنی ساخت شبکه در تنسورفلو در هوسم همراه باشید…
یک نمونه گراف یا شبکه ساده در تصویر زیر نشان داده شده است. همانطور که مشاهده میکنید، شبکه مبتنی بر عملگرها و نوعدادههایی است که در جلسههای قبلی آموختید. در ادامه، گام به گام در مورد کدنویسی این گراف در تنسورفلو توضیح داده خواهد شد.
بیایید ابتدا ورودیها را تعریف کنیم؛ با توجه به شبکه، سه ورودی ثابت a، b و c داریم که بهصورت زیر بهراحتی تعریف میشوند. قطعا نیازی نیست در مورد tf.constant توضیح دهیم، چون در جلسات قبل با این دستور آشنا شدید.
a = tf.constant(5) b = tf.constant(2) c = tf.constant(3)
پس از تعریف ورودیها، باید سه عملگر d، e و f را تعریف کنیم. این عملگرها، ورودیهایی دارند و ابتدا باید d و e را تعریف کنیم و سپس به سراغ f برویم. عملگر d یک عملگر ضرب متشکل از ورودیهای a و b است. بنابراین، اینگونه تعریف میشود:
d = tf.multiply(a,b)
عملگر e هم یک عملگر جمع هست که حاصلجمع دو ورودی b و c است. عملگر e را بهصورت زیر مینویسیم:
e = tf.add(c,b)
درنهایت، عملگر تفریق f از تفاضل خروجی دو عملگر d و e بدست میآید که در زیر کد آنرا مشاهده میکنید:
f = tf.subtract(d,e)
اولین شبکهمان را در تنسورفلو طراحی کردیم و حالا مشتاقیم که خروجی کار را مشاهده کنیم. انتظار داریم که بدانید برای مشاهده خروجی باید از tf.Session استفاده کنیم. ابتدا tf.Session را تعریف کرده و سپس با استفاده از run خروجی که همان f هست مشاهده میکنیم. کد مشاهده خروجی بهصورت زیر است:
sess = tf.Session() outs = sess.run(f) sess.close() print("outs = {}".format(outs)) Out: outs = 5
تا اینجا کار بزرگی انجام دادیم، شبکهای طراحی کردیم و خروجی آنرا نیز دیدیم، اما این شبکه اصلا بهکار ما نمیآید. نهتنها در این شبکه خبری از نورون و شبکه عصبی نیست، بلکه ایرادهای فراوان دیگری هم دارد. بهعنوان مثال، شبکهای که ورودی ثابت داشته باشد و نتوانیم ورودیهای متفاوت به آن بدهیم چه ارزشی دارد؟! ایرادهای دیگری هم دارد، اما بیایید شبکه را طوری تغییر دهیم که قابلیت تغییر مقدار ورودی داشته باشد. برای اینکار نیازی نیست کدها کاملا تغییر کند، با تغییری جزئی در ورودیهای a، b و c میتوانیم اینکار را انجام دهیم. اگر خاطرتان باشد، تعریف دادهها به سه شکل tf.constant، tf.Variable و tf.placeholder انجام میشد. میتوانیم از هر دو حالت tf.Variable و tf.placeholder استفاده کنیم، اما بهتراست tf.placeholder را بکار ببریم. یادتان باشد، ورودیهای خود را با tf.placeholder تعریف کنید و اگر یک پارامتری در شبکه دارید که نیاز به یک مقدار اولیه دارد و درطول فرآیند اجرای برنامه ممکن است مقدار آن تغییر کند از tf.Variable استفاده کنید. کدهای شبکه درحالت ورودیهای متغیر بهصورت زیر خواهد بود:
a = tf.placeholder(tf.float32) b = tf.placeholder(tf.float32) c = tf.placeholder(tf.float32) d = tf.multiply(a,b) e = tf.add(c,b) f = tf.subtract(d,e)
حال برای دیدن خروجی باید به شکل زیر کد بنویسیم:
sess = tf.Session() outs = sess.run(f, {a:-2, b:3, c:4}) sess.close() print("outs = {}".format(outs)) Out: outs = 5
برای تسلط بیشتر، پیشنهاد میکنیم تمرینات زیر را انجام دهید:
- ورودیهای متفاوت بدهید و خروجی را مشاهده کنید.
- آیا میتوان ورودیهای برداری یا ماتریسی تعریف کرد؟ اگر نمیشود، شبکه را طوری تغییر دهید که ورودیهای با ابعاد مختلف دریافت کند.
در ششمین جلسه از آموزش رایگان تنسورفلو به آموزش ساخت شبکه در تنسورفلو پرداختیم. شبکه اولیه ایرادهای زیادی داشت که یکی از آن موارد، یعنی ورودیهای ثابت را اصلاح کردیم. حال باید ایرادهای دیگر این شبکه را رفع کنیم که تا این جلسه در مورد آنها هیچ توضیحی نداده بودیم. تنسورفلو یک ابزار یادگیری ماشین است و در یادگیری ماشین ما سعی میکنیم الگوریتم یا شبکهای طراحی کنیم و آنرا آموزش دهیم تا برای کاربردی خاص مناسب شود. اما، شبکهای که در اینجا طراحی کردیم، هیچ فرآیند آموزشی ندارد، در جلسه بعدی در مورد اضافه کردن فرآیند آموزش و بهینهسازی به شبکهها و گرافهایمان توضیح خواهیم داد. کمکم مباحث آموزشی تخصصی خواهد شد و لازم است که با مفاهیم اولیه شبکههای عصبی آشنا باشید، چون در این جلسات هدف ما آموزش تنسورفلو است نه آموزش شبکههای عصبی… لطفا نظرات و سوالات خود را در مورد این جلسه کامنت کنید…
مطالب زیر را حتما مطالعه کنید
یادگیری انتقالی
شبکه VGG
مهندسی پرامپت
مدل nanoGPT
شگفتانگیزترین ایده هوش مصنوعی از نظر Andrej Karpathy
شبکه ویژن ترنسفورمر
2 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام ممنون از آموزشای بسیار روان و عالیتون. ممنون میشم با قدرت ادامه بدید. خداقوت میگم
بسیار عالی بود. جلسات بعدی کی قرار داده میشه؟