متن خبر

نحوه استفاده از TensorFlow برای یادگیری عمیق – اصول اولیه برای مبتدیان

نحوه استفاده از TensorFlow برای یادگیری عمیق – اصول اولیه برای مبتدیان

اخبارنحوه استفاده از TensorFlow برای یادگیری عمیق – اصول اولیه برای مبتدیان
شناسهٔ خبر: 266678 -




خبرکاو:

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

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

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

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

در این مقاله با تانسورها و نحوه کار با تانسورها با استفاده از TensorFlow آشنا می شویم. بیایید درست شیرجه بزنیم

تانسور چیست؟

یک توضیح ساده این است که تانسور یک آرایه چند بعدی است.

1*rLcM-j8b61Xlfk81k_exKw
اسکالر، بردار، ماتریس و تانسور

اسکالر یک عدد واحد است. بردار آرایه ای از اعداد است. ماتریس یک آرایه دو بعدی است. تانسور یک آرایه n بعدی است.

در TensorFlow، همه چیز را می توان یک تانسور در نظر گرفت، از جمله یک اسکالر. یک اسکالر یک تانسور با بعد 0، یک بردار با بعد 1 و یک ماتریس با بعد 2 خواهد بود.

اکنون، این مفید است زیرا ما محدود به کار با مجموعه داده های پیچیده در TensorFlow نیستیم. TensorFlow می تواند هر نوع داده ای را مدیریت کرده و آن را به مدل های یادگیری ماشینی تغذیه کند.

TensorFlow چیست؟

TensorFlow یک کتابخانه نرم افزار منبع باز برای ساخت شبکه های عصبی است. تیم Google Brain کسی بود که آن را ساخت و امروزه محبوب ترین کتابخانه یادگیری عمیق در بازار است.

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

1*mPUeOmKYoWvPcZFjMdsiUQ
شبکه عصبی طبقه بندی

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

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

تنسورفلو و کراس

1*X7QA_c8KHk7nD0tywv-OVg
تنسورفلو و کراس

TensorFlow یک API سطح بالایی به نام Keras دارد. Keras یک پروژه مستقل بود که اکنون در کتابخانه TensorFlow در دسترس است. Keras تعریف و آموزش مدل ها را آسان می کند در حالی که TensorFlow کنترل بیشتری بر محاسبات فراهم می کند.

TensorFlow از طیف وسیعی از سخت افزارها از جمله CPU، GPU و TPU پشتیبانی می کند. TPU ها واحدهای پردازش Tensor هستند که به طور خاص برای کار با Tensor و TensorFlow ساخته شده اند.

همچنین می‌توانیم TensorFlow را بر روی دستگاه‌های تلفن همراه و دستگاه‌های IoT با استفاده از TensorFlow Lite اجرا کنیم. TensorFlow همچنین دارای یک جامعه بزرگ از توسعه دهندگان است و با ویژگی ها و قابلیت های جدید به روز می شود.

چگونه با TensorFlow تانسور بسازیم

بیایید شروع به نوشتن چند کد کنیم. اگر TensorFlow را نصب نکرده‌اید، می‌توانید از یک نوت بوک Google colab برای پیگیری استفاده کنید.

بیایید با وارد کردن TensorFlow و چاپ نسخه شروع کنیم.

 import tensorflow as tf print(tf.__version__)
 OUTPUT: 2.9.2

بیایید ابتدا یک اسکالر با استفاده از tf.constant ایجاد کنیم. ما از tf.constant برای ایجاد یک مقدار ثابت جدید استفاده می کنیم. همچنین می توانیم از tf.variable برای ایجاد یک مقدار متغیر استفاده کنیم. سپس مقدار را چاپ می کنیم و همچنین با استفاده از ویژگی ndim ابعاد اسکالر را تحلیل می کنیم. بعد آن صفر خواهد بود زیرا یک مقدار واحد است.

 scalar = tf.constant(7) print(scalar) print(scalar.ndim)
 OUTPUT: tf.Tensor(7, shape=(), dtype=int32) 0

حالا بیایید یک وکتور بسازیم و ابعاد آن را چاپ کنیم. می بینید که بعد 1 است.

 vector = tf.constant([10,10]) print(vector) print(vector.ndim)
 OUTPUT: tf.Tensor([10 10], shape=(2,), dtype=int32) 1

حال بیایید سعی کنیم یک ماتریس ایجاد کنیم و ابعاد آن را چاپ کنیم.

 matrix = tf.constant([ [10,11], [12,13] ]) print(matrix) print(matrix.ndim)
 OUTPUT: tf.Tensor( [[10 11] [12 13]], shape=(2, 2), dtype=int32) 2

خواهید دید که اکنون بعد 2 است. همچنین می توانید ببینید که شکل ماتریس 2 در 2 است.

اشکال و ابعاد هنگام کار با TensorFlow مفید هستند زیرا ما اغلب آنها را هنگام استفاده از این داده ها برای آموزش شبکه های عصبی تغییر می دهیم.

ما دیدیم که این تانسورها یک نوع داده پیش فرض int32 دارند. اگر بخواهیم یک مجموعه داده با یک نوع داده سفارشی ایجاد کنیم چه؟

tf.constant آرگومان dtype را در اختیار ما قرار می دهد. بیایید دوباره همان ماتریس را با float16 به عنوان نوع داده ایجاد کنیم.

 tensor_1 = tf.constant([ [ [1,2,3] ], [ [4,5,6] ], [ [7,8,9] ] ],dtype='float32') print(tensor_1)
 OUTPUT: tf.Tensor( [[[1. 2. 3.]] [[4. 5. 6.]] [[7. 8. 9.]]], shape=(3, 1, 3), dtype=float32)

حالا بیایید یک تانسور ایجاد کنیم. یک آرایه سه بعدی را به tf.constant وارد می کنیم. ابعاد آن را نیز چاپ خواهیم کرد.

 tensor = tf.constant([ [ [1,2,3] ], [ [4,5,6] ], [ [7,8,9] ] ]) print(tensor) print(tensor.ndim)
 OUTPUT: tf.Tensor( [[[1 2 3]] [[4 5 6]] [[7 8 9]]], shape=(3, 1, 3), dtype=int32) 3

اکنون یک تانسور با ابعاد 3 و شکل 3 در 1 در 3 داریم. این ساده ترین تانسوری است که می توانید ایجاد کنید. در سناریوهای دنیای واقعی، با تانسورهایی با ابعاد بالاتر و اشکال بزرگتر سروکار خواهیم داشت.

حال بیایید نحوه ایجاد یک تانسور متغیر را تحلیل کنیم. ما اغلب از تانسورهای متغیر در مقایسه با تانسورهای ثابت استفاده نخواهیم کرد، اما خوب است بدانید که یک گزینه داریم.

برای ایجاد یک تانسور متغیر از tf.Variable استفاده می کنیم. تفاوت بین تانسور ثابت و تانسور متغیر این است که شما می توانید داده ها را در یک تانسور متغیر تغییر دهید، اما نمی توانید مقادیر را در یک تانسور ثابت تغییر دهید. بیایید یک تانسور متغیر ایجاد کنیم و ابعاد را چاپ کنیم.

 var_tensor = tf.Variable([ [ [1,2,3] ], [ [4,5,6] ], [ [7,8,9] ] ]) print(var_tensor)
 OUTPUT: <tf.Variable 'Variable:0' shape=(3, 1, 3) dtype=int32, numpy= array([[[1, 2, 3]], [[4, 5, 6]], [[7, 8, 9]]], dtype=int32)>

بیایید نحوه تولید تانسور را تحلیل کنیم. در بیشتر موارد، تانسورها را از ابتدا ایجاد نخواهید کرد. شما یا یک مجموعه داده را بارگیری می کنید، مجموعه داده های دیگر مانند آرایه های NumPy را به تانسور تبدیل می کنید، یا تانسور تولید می کنید. ابتدا بیایید نحوه تولید تانسورها را تحلیل کنیم.

بیایید یک تانسور با مقادیر تصادفی ایجاد کنیم. دو راه متداول برای انجام این کار وجود دارد: ایجاد توزیع نرمال داده یا توزیع یکنواخت داده.

0*tRWkwBjuQvgi2rGG
توزیع نرمال

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

0*SOM1PR1htTNzuRMS
توزیع یکنواخت

توزیع یکنواخت یک خط مستقیم است که توزیع داده ها را نشان می دهد. همه مقادیر در یک توزیع یکنواخت احتمال یکسانی برای وقوع در یک محدوده معین خواهند داشت.

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

بیایید دو آرایه از تانسورهای تصادفی ایجاد کنیم. ابتدا یک دانه تنظیم می کنیم و مقادیر تصادفی را با استفاده از آن دانه تولید می کنیم.

 seed = tf.random.Generator.from_seed(42)

حالا یک توزیع نرمال و یکنواخت به شکل 3 در 2 ایجاد می کنیم.

 normal_tensor = seed.normal(shape=(3,2)) print(normal_tensor) uniform_tensor = seed.uniform(shape=(3,2)) print(uniform_tensor)
 OUTPUT: tf.Tensor( [[-0.7565803 -0.06854702] [ 0.07595026 -1.2573844 ] [-0.23193765 -1.8107855 ]], shape=(3, 2), dtype=float32) tf.Tensor( [[0.7647915 0.03845465] [0.8506975 0.20781887] [0.711869 0.8843919 ]], shape=(3, 2), dtype=float32)

ما دو تانسور ایجاد شده داریم، یکی با توزیع نرمال اعداد تصادفی و دیگری با توزیع یکنواخت اعداد تصادفی.

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

برای ایجاد یک تانسور صفر، از تابع tf.zeros با یک شکل به عنوان آرگومان ورودی استفاده کنید. برای ایجاد یک تانسور با یک ها، از tf.ones با شکل به عنوان آرگومان ورودی استفاده می کنیم.

 zeros = tf.zeros(shape=(3,2)) print(zeros) ones = tf.ones(shape=(3,2)) print(ones)
 OUTPUT: tf.Tensor( [[0. 0.] [0. 0.] [0. 0.]], shape=(3, 2), dtype=float32) tf.Tensor( [[1. 1.] [1. 1.] [1. 1.]], shape=(3, 2), dtype=float32)

حالا بیایید به تبدیل آرایه های NumPy به تانسور نگاه کنیم. اگر نمی دانید NumPy چیست ، یک کتابخانه پایتون برای محاسبات عددی است. این به ما کمک می کند تا مجموعه داده های بزرگ را مدیریت کنیم و محاسبات مختلفی را روی آنها انجام دهیم.

بیایید NumPy را وارد کنیم و یک آرایه NumPy با استفاده از تابع arrange NumPy ایجاد کنیم.

 import numpy as np numpy_arr = np.arange(1,25,dtype=np.int32)

اکنون می توانیم با استفاده از تابع tf.constant با آرایه NumPy به عنوان ورودی یک تانسور ایجاد کنیم. TensorFlow دارای پشتیبانی داخلی برای مدیریت آرایه های NumPy است، پس فقط وارد کردن یک آرایه NumPy و تنظیم یک شکل است.

 print(numpy_arr) numpy_tensor = tf.constant(numpy_arr,shape=[2,4,3]) print(numpy_tensor)
 OUTPUT: [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24] tf.Tensor( [[[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12]] [[13 14 15] [16 17 18] [19 20 21] [22 23 24]]], shape=(2, 4, 3), dtype=int32)

شما می توانید هم آرایه NumPy و هم تانسور ما را ببینید. آرایه اصلی NumPy 1x12 بود اما تانسور ما 2x4x3 است. به این می گویند شکل دادن مجدد یک تانسور که اغلب در حین آموزش شبکه های عصبی عمیق انجام می دهیم.

ما یاد گرفتیم که چگونه تانسورها در TensorFlow ایجاد می شوند. حال بیایید به چند عملیات اساسی با استفاده از تانسورها نگاه کنیم.

ما با بدست آوردن اطلاعاتی در مورد تانسورهای خود شروع خواهیم کرد. بیایید یک تانسور 4 بعدی با مقدار 0 با شکل 2x3x4x5 ایجاد کنیم.

 rank4_tensor = tf.zeros([2,3,4,5]) print(rank4_tensor)
 OUTPUT: tf.Tensor( [[[[0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.]] [[0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.]] [[0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.]]] [[[0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.]] [[0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.]] [[0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.]]]], shape=(2, 3, 4, 5), dtype=float32)

ما تانسور رتبه 4 خود را ایجاد کرده ایم. حالا بیایید اطلاعاتی در مورد اندازه، شکل (تعداد مقادیر) و بعد تانسور به دست آوریم.

برای بدست آوردن اندازه از تابع tf.size استفاده می کنیم. شکل و خواص ndim شکل و ابعاد تانسور را به ما می دهد.

 print("Size",tf.size(rank4_tensor)) print("shape",rank4_tensor.shape) print("Dimension",rank4_tensor.ndim)
 OUTPUT: Size tf.Tensor(120, shape=(), dtype=int32) shape (2, 3, 4, 5) Dimension 4

بیایید به چند محاسبات ساده با استفاده از تانسور نگاه کنیم. من یک تانسور پایه جدید ایجاد خواهم کرد.

 basic_tensor = tf.constant([[10,11],[12,13]]) print(basic_tensor)
 OUTPUT: tf.Tensor( [[10 11] [12 13]], shape=(2, 2), dtype=int32)

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

 print(basic_tensor + 10) print(basic_tensor - 10) print(basic_tensor * 10) print(basic_tensor / 10)
 OUTPUT: tf.Tensor( [[20 21] [22 23]], shape=(2, 2), dtype=int32) tf.Tensor( [[0 1] [2 3]], shape=(2, 2), dtype=int32) tf.Tensor( [[100 110] [120 130]], shape=(2, 2), dtype=int32) tf.Tensor( [[1. 1.1] [1.2 1.3]], shape=(2, 2), dtype=float64)

حالا بیایید ضرب ماتریس را امتحان کنیم. من دو تانسور ساده tensor_011 و tensor_012 ایجاد خواهم کرد.

 tensor_011 = tf.constant([[2,2],[4,4]]) tensor_012 = tf.constant([[2,3],[4,5]])

به خاطر داشته باشید که در ضرب ماتریس، ابعاد داخلی باید مطابقت داشته باشند. به عنوان مثال، ضرب (3، 5) * (3، 5) کار نخواهد کرد اما (3، 5) * (5، 3) کار خواهد کرد.

شکل نهایی ماتریس حاصل، بعد بیرونی آن خواهد بود. پس ، یک تانسور 3x5 ضرب در یک تانسور 5x3 به ما یک تانسور 5x5 می دهد. برای انجام ضرب ماتریس از تابع tf.matmul استفاده می کنیم.

 print(tf.matmul(tensor_011,tensor_012))
 OUTPUT: tf.Tensor( [[12 16] [24 32]], shape=(2, 2), dtype=int32)

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

به عنوان مثال، یک ماتریس پیکسل تصویر 28x28 به یک آرایه 784 پیکسلی 1 بعدی برای یک شبکه عصبی طبقه‌بندی تصویر تبدیل می‌شود.

برای تغییر شکل از تابع tf.reshape استفاده می کنیم. برای انتقال، از تابع tf.transpose استفاده می کنیم. اگر نمی‌دانید transpose چیست، ردیف‌ها را به ستون و ستون‌ها را به ردیف تبدیل می‌کند.

 print(tf.reshape(tensor_011,[4,1])) print(tf.transpose(tensor_011))
 OUTPUT: tf.Tensor( [[2] [2] [4] [4]], shape=(4, 1), dtype=int32) tf.Tensor( [[2 4] [2 4]], shape=(2, 2), dtype=int32)

در نهایت، اجازه دهید به چند عملیات کل مانند حداقل، حداکثر، انحراف استاندارد، مربع و جذر نگاه کنیم.

برای یافتن مقادیر حداقل و حداکثر از توابع tf.reduce_min و tf.reduce_max استفاده می کنیم. و برای یافتن مجموع آرایه از تابع tf.reduce_sum استفاده می کنیم.

 tensor_013 = tf.constant([ [1,2,3], [4,5,6], [7,8,9] ],dtype='float32') print(tf.reduce_min(tensor_013)) print(tf.reduce_max(tensor_013)) print(tf.reduce_sum(tensor_013))
 OUTPUT: tf.Tensor(1.0, shape=(), dtype=float32) tf.Tensor(9.0, shape=(), dtype=float32) tf.Tensor(45.0, shape=(), dtype=float32)

حال برای انحراف استاندارد و واریانس از تابع tf.math.reduce_std و تابع tf.math.reduce_variance استفاده می کنیم.

 print(tf.math.reduce_std(tensor_013)) print(tf.math.reduce_variance(tensor_013))
 OUTPUT: tf.Tensor(2.5819888, shape=(), dtype=float32) tf.Tensor(6.6666665, shape=(), dtype=float32)

بیایید مربع، جذر و لاگ هر مقدار را در یک تانسور پیدا کنیم.

 print(tf.sqrt(tensor_013)) print(tf.square(tensor_013)) print(tf.math.log(tensor_013))
 OUTPUT: tf.Tensor( [[1. 1.4142135 1.7320508] [2. 2.236068 2.4494898] [2.6457512 2.828427 3. ]], shape=(3, 3), dtype=float32) tf.Tensor( [[ 1. 4. 9.] [16. 25. 36.] [49. 64. 81.]], shape=(3, 3), dtype=float32) tf.Tensor( [[0. 0.6931472 1.0986123] [1.3862944 1.609438 1.7917595] [1.9459102 2.0794415 2.1972246]], shape=(3, 3), dtype=float32)

ما در این مقاله اصول TensorFlow را یاد گرفتیم. اکنون برای کار با TensorFlow و استفاده از آن برای مدل سازی داده ها مجهز شده اید.

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

نتیجه

Tensorflow یک کتابخانه قدرتمند برای ساخت مدل های یادگیری عمیق است. تمام ابزارهای مورد نیاز ما برای ساخت شبکه های عصبی برای حل مسائلی مانند طبقه بندی تصاویر، تحلیل احساسات، پیش بینی بازار سهام و غیره را دارد.

با ظهور فناوری‌هایی مانند ChatGPT، یادگیری TensorFlow به شما در بازار کار فعلی یک شروع خواهد داد.

امیدواریم این مقاله را دوست داشته باشید. می توانید در manishmshiva.com درباره من و مقالات/ویدئوهای من بیشتر بدانید .

برچسب‌ها

ارسال نظر




تبليغات ايهنا تبليغات ايهنا

تمامی حقوق مادی و معنوی این سایت متعلق به خبرکاو است و استفاده از مطالب با ذکر منبع بلامانع است