عملیات جبری در تنسورفلو
بسم الله الرحمن الرحیم
سلام به همه دوستان،
در این پست، با جلسه پنجم آموزش تنسورفلو با موضوع عملیات جبری در تنسورفلو در خدمت شما هستیم. تاکنون، نحوه تعریف متغیرها (جلسه سوم)، آرایهها (جلسه چهارم) را توضیح دادهایم. حال میخواهیم ببینیم چگونه میتوانیم روی این متغیرها و ماتریسها عملیات جبری انجام دهیم. منظور ما از عملیات جبری، همان عملیات جمع، ضرب، توان و سایر عملیات مهم است که در اینجا به توضیح آنها خواهیم پرداخت. با عملیات جبری در تنسورفلو در پایگاه آموزشی و پژوهشی هوسم همراه باشید…
tf.add
با استفاده از این دستور دو تنسور را میتوانیم با هم جمع کنیم. وقتی میگوییم تنسور، انتظار داریم بدانید که تنسور میتواند یک عدد اسکالر، بردار، ماتریس و آرایههای چندبعدی باشد. آیا نمیتوانیم برای جمع دو تنسور از علامت + مانند بسیاری از زبانهای برنامهنویسی استفاده کنیم؟ در اینجا هم میتوانید استفاده کنید، اما tf.add یک برتری نسبت به + دارد. برتری tf.add نسبت به + این است که شما میتوانید برای عملیات جمع خود یک اسم انتخاب کنید. ممکن است بپرسید، این انتخاب اسم برای یک عملیات جمع چه مزیتی میتواند داشته باشد؟ جواب این سوال را در جلسه بعدی خواهیم داد. فعلا همین کافی است بدانید تمامی عملگرهایی که در این جلسه معرفی میکنیم، میتوانند یک اسم هم داشته باشند. البته، این اسم اختیاری است و همانطور که در کدهای زیر نشان داده شده است، میتوانید هیچ اسمی انتخاب نکنید. تنسورفلو خودش یک نام برای عملیات شما انتخاب میکند. در کدهای زیر، دو تنسور تعریف کردهایم و در سه حالت مختلف این دو تنسور را با هم جمع کردهایم. کلمه Name در خط چهارم به انتخاب یک اسم دلخواه برای عملیات جمع اشاره دارد.
import tensorflow as tf a = tf.Variable([5, 1, -1]) b = tf.Variable([3, -1, 1]) c = tf.add(a,b) d = tf.add(a,b,"Name") e = a + b
گفتیم که اگر ما برای عملیات مدنظرمان اسمی انتخاب نکنیم، تنسورفلو خودش یک اسم انتخاب میکند. در زیر مشاهده میکنید که خط اول مربوط به حالتی است که ما هیچ اسمی انتخاب نکردهایم و اسم Add:0 انتخاب شده است. در خط دوم ما اسم Name را انتخاب کردهایم.
print(c) <tf.Tensor 'Add:0' shape=(3,) dtype=int32> print(d) <tf.Tensor 'Name:0' shape=(3,) dtype=int32>
حتما از جلسات قبل میدانید که برای مشاهده خروجی در تنسورفلو باید از tf.Session استفاده کنیم.
sess = tf.Session() init = tf.global_variables_initializer() sess.run(init) sess.run(c) array([8, 0, 0]) sess.run(d) array([8, 0, 0]) sess.run(e) array([8, 0, 0])
یادآوردی: در جلسههای قبلی در مورد tf.global_variables_initializer توضیح دادیم. این دستور، مقادیر تعریف شده برای متغیرها را مقداردهی میکند.
تا به اینجا بهصورت کامل در مورد tf.add توضیح دادیم، سایر عملگرهایی که میخواهیم توضیح دهیم مشابه tf.add هستند، بنابراین از توضیحات اضافه خودداری میکنیم.
tf.multiply
این دستور، دو تنسور را در هم ضرب میکند. همان دو تنسور a و b در بالا را با کدهای زیر در هم ضرب میکنیم. در اینحالت هم بجای tf.multiply میتوان از علامت * استفاده کرد.
c = tf.multiply(a,b) d = tf.multiply(a,b,"Name") e = a * b sess.run([c, d, e]) [array([15, -1, -1]), array([15, -1, -1]), array([15, -1, -1])]
tf.subtract
از این دستور برای تفریق دو تنسور از هم استفاده میشود. با استفاده از دستورات زیر دو تنسور a و b را از هم کم کردهایم. از علامت – هم میتوانیم برای تفریق استفاده کنیم.
c = tf.subtract(a,b) d = tf.subtract(a,b,"Name") e = a - b sess.run([c, d, e]) [array([ 2, 2, -2]), array([ 2, 2, -2]), array([ 2, 2, -2])]
tf.divide
از این دستور برای تقسیم دو تنسور استفاده میشود. با استفاده از دستورات زیر دو تنسور a و b را بر هم تقسیم کردهایم. از علامت / هم میتوانیم برای تقسیم استفاده کنیم.
c = tf.divide(a,b) d = tf.divide(a,b,"Name") e = a / b sess.run([c, d, e]) [array([ 1.66666667, -1. , -1. ]), array([ 1.66666667, -1. , -1. ]), array([ 1.66666667, -1. , -1. ])]
tf.pow
از این دستور برای به توان رساندن مشابه با کدهای زیر استفاده میشود. برای به توان رساندن از علامت ** هم میتوانید استفاده کنید.
c = tf.pow(a,2) d = tf.pow(a,3,"Name") e = a ** 4 sess.run([c, d, e]) [array([25, 1, 1]), array([25, 1, 1]), array([625, 1, 1])]
tf.mod
این دستور باقیمانده دو تنسور a و b را محاسبه میکند. بجای این دستور میتوان از علامت % هم استفاده کرد.
c = tf.mod(a,b) d = tf.mod(a,b,"Name") e = a % b sess.run([c, d, e]) [array([2, 0, 0]), array([2, 0, 0]), array([2, 0, 0])]
tf.abs
این دستور قدرمطلق یک تنسور را در اختیار ما قرار میدهد.
c = tf.abs(a) sess.run(c) array([5, 1, 1])
tf.greater
از مجموعه دستورات مقایسه است که تنسورهای a و b با هم از نظر بزرگتر بودن با هم مقایسه میشوند. بجای این دستور از علامت < هم میتوان استفاده کرد.
c = tf.greater(a,b) d = tf.greater(a,b,"Name") e = a > b sess.run([c, d, e]) [array([ True, True, False], dtype=bool), array([ True, True, False], dtype=bool), array([ True, True, False], dtype=bool)]
tf.greater_equal
مقایسه دو تنسور از نظر بزرگتر-مساوی بودن مورد بررسی قرار میگیرد و البته بجای این دستور میتوان از =< هم استفاده کرد.
c = tf.greater_equal(a,b) d = tf.greater_equal(a,b,"Name") e = a >= b sess.run([c, d, e]) [array([ True, True, False], dtype=bool), array([ True, True, False], dtype=bool), array([ True, True, False], dtype=bool)]
tf.less
مقایسه دو دستور از نظر کوچکتر بودن و یا استفاده از علامت > بجای این دستور هست.
c = tf.less(a,b) d = tf.less(a,b,"Name") e = a < b sess.run([c, d, e]) [array([False, False, True], dtype=bool), array([False, False, True], dtype=bool), array([False, False, True], dtype=bool)]
tf.less_equal
مشابه دستورات بالا و مقایسه کوچکتر-مساوی و یا استفاده از علامت => بجای دستور tf.less_equal هست.
c = tf.less_equal(a,b) d = tf.less_equal(a,b,"Name") e = a <= b sess.run([c, d, e]) [array([False, False, True], dtype=bool), array([False, False, True], dtype=bool), array([False, False, True], dtype=bool)]
خسته نباشید، جلسه پنجم آموزش تنسورفلو که مربوط به عملیات جبری در تنسورفلو بود هم تمام شد. خدا را شاکریم که تاکنون توانستیم پنج جلسه از آموزش تنسورفلو را آماده کنیم. این آموزشها کاملا اختصاصی توسط گروه هوسم تهیه شده است و اصلا کپیبرداری از سایر سایتها نیست. خاطرتان هست در جلسه دوم آموزش تنسورفلو دو عامل دادهها (Tensor) و شبکه (Flow) را پارامترهای مهم در برنامهنویسی تنسورفلو معرفی کردیم؟ در این پنج جلسه، بر اساس همین دو عامل بود که آموزش تنسورفلو را پیش بردیم؛ یعنی، ابتدا به نحوه تعریف دادهها مانند نحوه تعریف متغیرها (جلسه سوم) و تعریف آرایهها (جلسه چهارم) پرداختیم. بعد از اینکه نحوه تعریف دادهها را یاد گرفتیم، باید یاد بگیریم که گراف یا شبکه مدنظرمان را بسازیم. برای ساختن گراف یا شبکه نیاز داریم عملیات جبری در تنسورفلو را یاد بگیریم. به همین دلیل، جلسه امروز را به عملیات جبری در تنسورفلو اختصاص دادیم. حال، آمادهایم که گراف یا شبکه بسازیم. به بخشهای جالب تنسورفلو رسیدهایم. با هوسم همراه باشید…
دیدگاهتان را بنویسید