MNIST در TensorFlow


این آموزش برای آن دسته از مخاطبانی است که به‌تازگی قصد آموختن یادگیری ماشین و تنسورفلو را کرده‌اند. ممکن است بخش‌هایی از این مطلب در مقالات و مطالب قبلی نیز بیان‌شده باشند که برای اطلاعات تکمیلی‌تر به آن‌ها ارجاع داده خواهد گشت. اگر شما می‌دانید که MNIST چیست و با شبکه عصبی چندلایه (MLP) و رگرسیون SOFTMAX آشنایی دارید ، بهتر است آموزش‌های دیگر را دنبال کنید.

قبل هر چیز اگر تنسورفلو را نصب نکرده‌اید به بخش آموزش نصب مراجعه کنید و درصورتی‌ که بر روی رایانه شما نصب است، از صحت نصب آن مطمئن شوید.

به‌طور معمول در آموزش‌های زبان‌ها و ابزار‌های برنامه‌نویسی و یا برنامه‌سازی، سنتی دیرینه وجود دارد و آن سنت این است که اولین مثالی که آموخته می‌شود، برنامه چاپ “HELLO WORLD” است. همانند زبان‌های برنامه‌نویسی که مثال Hello world دارند، یادگیری ماشین نیز مسئله‌ای ابتدایی دارد که از آن با نام MNIST یادد می‌شود.

Mnist یک مجموعه داده ساده در زمینه بینایی ماشین(کامپیوتر) است. این مجموعه داده شامل تصاویری از ارقام دست‌نویس انگلیسی مانند تصاویر زیر است:

هم‌چنین در این مجموعه، برچسب‌هایی برای هر تصویر وجود دارد که بیانگر این است که هر تصویر نمایان گر چه رقمی است.

برای مثال این برچسب‌ها برای تصاویر بالا به ترتیب از چپ به راست عبارت‌اند از ۵و۰و۴و۱٫

در این آموزش ، ما قصد داریم مدلی را آموزش دهیم که به نوعی به تصاویر نگاه کند و بگوید که این تصاویر بیانگر چه ارقامی هستند. هدف از این آموزش این نیست که یک مدل واقعاً پیچیده را که کارایی چشمگیر( state-of-the-art) دارد، آموزش دهیم — گرچه در آموزش‌ها و مقالات دیگر این کار را به شما آمورش خواهیم داد — در حقیقت هدف این مطلب، برداشتن گامی کوچک در راستای استفاده از تنسورفلو است. به‌طور جزئی‌تر، قصد داریم که با یک مثال خیلی ساده به نام رگرسیون softmax شروع کنیم.

کد استفاده‌شده برای این آموزش بسیار کوتاه است و همه چیزهای جالب کار، در سه خط کد اتفاق می‌افتد. هرچند درک ایده پشت آن بسیار مهم‌تر است، یعنی چگونه TensorFlow کار می‌کند و مفاهیم هسته یادگیری ماشین. به همین خاطر قصد داریم که خیلی با دقت با کد کار کنیم.

داده‌های MNIST

داده‌های MNIST بر روی وب‌سایت پروفسور Yann LeCun قرارگرفته است. برای راحتی شما، تعدادی کد پایتون در تنسورفلو قرار داده‌شده که به صورت خودکار مجموعه داده را دانلود و نصب می‌نماید .شما می‌توانید مجموعه داده‌ها با استفاده از کد زیر فراخوانی و دانلود نمایید.

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

داده‌های دانلود شده به سه بخش تقسیم می‌شوند، ۵۵٫۰۰۰ نمونه (داده) به عنوان مجموعه داده آموزشی ، ۱۰۰۰۰۰ نمونه برای تست و ۵۰۰۰ نمونه برای اعتبار سنجی. این تقسیم بسیار مهم است ، در یادگیری ماشین بسیار ضروری است که داده‌ها را جدا کرده که بیشتر از حدی مدل آموزش داده نشود تا مطمئن شویم که مدلی که آموزش دیده است در واقع تعمیم‌پذیر است یا به بیان ساده‌تر مدل آموزش داده‌شده به صورت طوطی‌وار عمل نمی‌کند که فقط قادر به پاسخ‌گویی نمونه‌های آموزش دیده باشد و در مقابل نمونه‌هایی که در فرآیند آموزش مشاهده نکرده عاجز باشد.

همان‌طور که ذکر شد، هر داده MNIST دو بخش دارد، یک تصویر از یک رقم دست‌نویس و برچسب مرتبط با آن.

ما از این پس تصاویر را “xs” و برچسب‌های مرتبط را “ys” می‌نامیم. هر دو مجموعه آموزش و تست xs و ys دارند، برای مثال تصاویر آموزشی mnist.train.images و برچسب‌های آموزشی mnist.train.images هستند.

اندازه هر تصویر ۲۸*۲۸ پیکسل است. ما می‌توانیم هر تصویر را به‌صورت آرایه‌ای بزرگ از اعداد تفسیر کنیم:

هم‌چنین می‌توان این آرایه را به یک بردار با اندازه ۲۸*۲۸=۷۸۴ تبدیل کرد. مهم نیست که ما آرایه را چگونه به بردار تبدیل کردیم، فقط باید همین روال را برای همه داده‌ها به یک صورت انجام دهیم.

اگر از این بعد به تصاویر MNIST نگاه کنیم، می‌توانیم این بردارهای تصاویر MNIST را گروهی از نقاط در یک فضای برداری ۷۸۴ بعدی هستند. اگر این درک مطلب قدری برای شما دشوار است و یا تجسم این فضاها و داده‌ها قدری پیچیده به نظر می‌رسد، بهتر است سری به این پست بزنید که در آن مجموعه داده‌ی MNIST بصری سازی (Visualisation) شده است.

اما شاید سؤالی که برای شما نیز مطرح می‌شود، مسطح سازی داده‌ها بدون توجه به ساختار ۲بعدی تصاویر است. ممکن است شما نیز بر این باور باشید که این کار آن‌چنان روش خوبی نیست. بهترین روش بینایی ماشین برای بهره‌برداری از این ساختار (دوبعدی) تصاویر در مطالب بعدی توضیح داده خواهد شد. اما این عمل مسطح سازی برای روش ساده‌ای که در این آموزش استفاده می‌شود (یعنی رگرسیون softmax است) بد نیست.

با اوصاف بالا، mnist.train.images یک تانسور است ( یک آرایه‌ی n بعدی) با ابعاد [۵۵۰۰۰و۷۸۴۴] است.اندیس بعد اول بیانگر تصاویر و اندیس بعد دوم بیانگر پیکسل‌های هر تصویر است. هر مقدار در یک تانسور پیکسلی در یک تصویر خاص است که شدت نور آن پیکسل بین ۰ و ۱ است. تصویر زیر تجسمی از این تانسور است.

ادامه مطلب در این لینک است.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.