ورودی NLP در اکثر کاربردها به جای پیکسل‌های یک تصویر، جمله‌ها یا اسنادی است که به صورت یک ماتریس نشان داده می‌شوند. هر سطر از ماتریس، متناظر با یک نشانه (token) است. این نشانه معمولا یک کلمه است، اما می‌تواند یک کاراکتر نیز باشد. یعنی هر سطر، برداری است که نشان‌دهنده یک کلمه است. معمولا این بردارها نمایشی با بعد پایین‌تر از کلمه مورد نظر هستند که به آن word embedding گفته می‌شود (مانند، word2vec یا GloVe). اما بردارها می‌توانند بردارهای one-hot نیز باشند و اندیس کلمه در یک مجموعه لغات (vocabulary) را نمایش دهند. برای یک جمله ۱۰ کلمه‌ای و با استفاده از embedding 100 بٌعدی، به عنوان ورودی، یک ماتریس ۱۰۰×۱۰ خواهیم داشت. این، همان «تصویر» ما است. بنابراین، می‌توان کارآیی شبکه‌های کانولوشنی در NLP را مورد بررسی و ارزیابی قرار داد.

در بینایی، فیلترهای چشم روی patchهای محلی تصویر می‌لغزد (slide)، اما در NLP معمولا از فیلترهایی استفاده می‌شود که روی کل سطرهای ماتریس (کلمه‌ها) می‌لغزد. بنابراین «پهنای» فیلتر معمولا با پهنای ماتریس ورودی یکسان است. طول فیلتر (Region Size) ممکن است تغییر کند اما معمولا پنجره طوری انتخاب می‌شود که هر بار روی ۲ تا ۵ کلمه بلغزد. به عنوان جمع‌بندی مباحث بالا، یک شبکه عصبی کانولوشنی برای NLP به شکل زیر خواهد بود:

تصویری از معماری یک شبکه عصبی کانولوشنی برای کلاس‌بندی جملات. در این تصویر سه طول‌ ۲، ۳ و ۴ برای فیلترها در نظر گرفته شده که از هر طول دو فیلتر وجود دارد (مجموعا ۶ فیلتر). هر فیلتر روی ماتریس جملات کانولوشن انجام می‌دهد و یک feature map (با طول متفاوت) تولید می‌کند. سپس روی هر map عملیات ۱-max pooling انجام می‌شود. به عبارت دیگر بزرگترین عدد از هر feature map انتخاب می‌شود. بنابراین یک بردار ویژگی از هر map ساخته می‌شود. سپس این بردارهای ویژگی برای داشتن یک بردار ویژگی واحد برای لایه ماقبل آخر، پشت هم (concatenate) قرار داده می‌شوند.در آخر، لایه softmax این بردار ویژگی را به عنوان ورودی دریافت کرده و از آن برای کلاس‌بندی جمله استفاده می‌کند. در اینجا فرض بر کلاس‌بندی باینری بوده و بنابراین دو خروجی برای کلاس‌بندی در نظر گرفته شده است.

لطفا به این پست رای دهید…

۰
برچسب

convolution, convolutional neural network, deep learning, neural network, nlp, tensorflow, what is tensorflow, شبکه عصبی, شبکه عصبی عمیق, شبکه عصبی کانولوشنی, یادگیری عمیق, یادگیری ماشین,


کد خبر:
۴۷۶۰۶۰
| تاریخ مخابره:
۱۳۹۷/۶/۲۱
۲۱:۴۲

کمپنا – دیدار پرسپولیس و نساجی به دلیل اخراج علی شجاعی برای دقایقی دچار توقف و تنش شد.


 


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


 


شجاعی با همراهی هاشمی نسب و نیمکت نساجی از زمین بیرون رفت.


 


این دیدار تا دقیقه ۶۸ با یک گل به سود پرسپولیس در جریان است.




کد خبر:
۴۷۵۹۴۱
| تاریخ مخابره:
۱۳۹۷/۶/۲۰
۱۳:۱۳

کمپنا – تنها ۸ ساعت تا شروع دیدار دوستانه ایران و ازبکستان در شهر تاشکند باقی مانده است.


 


به گزارش کمپنا، ملی‌پوشان کشورمان از ساعت ۱۹:۳۰ امروز در ورزشگاه ملی تاشکند میهمان ازبک‌ها خواهد بود.


 


شاگردان کی‌روش امروز در اولین بازی تدارکاتی خود پس از جام جهانی ۲۰۱۸ روسیه، به مصاف ازبکستان خواهند رفت. در ادامه تصویری از بلیت این بازی را مشاهده می‌کنید.




کد خبر:
۴۷۵۷۸۰
| تاریخ مخابره:
Û±Û³Û¹Û·/Û¶/Û±Û¸
۱۳:۵۳

بانک ورزش – تیم ملی فوتبال کشورمان سه‌شنبه این هفته در تاشکند دیداری دوستانه با ازبکستان خواهد داشت.


 


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


 


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


 


نتایج زیر توسط اسکای اسپورت منتشر شده است.




کد خبر:
۴۵۴۷۱۵
| تاریخ مخابره:
۱۳۹۷/۶/۶
۱۵:۴۴

کمپنا – از نگاه یک سایت آماری، مهدی رحمتی ضعیف‌ترین بازیکن دیدار استقلال و السد در ورزشگاه آزادی بود.


 


به گزارش کمپنا، سایت سوفا اسکور پس از پایان دیدار دو تیم در مرحله یک چهارم نهایی لیگ قهرمانان آسیا، به ارزیابی بازیکنان پرداخت که در این میان کاپیتان استقلال با نمره ۵٫۹ ضعیف‌ترین بازیکن میدان انتخاب شد.


 


گلر السد هم که روی گل اول بازی مقصر بود نمره ۶٫۴ گرفت. نیومایر از استقلال با نمره ۷ بهترین بازیکن آبی‌پوشان بود که توسط شفر تعویض شد.


 


بغداد بونجاح زننده دو گل السد در آزادی نمره عالی ۹٫۸ گرفت.




کد خبر:
۴۵۴۱۶۹
| تاریخ مخابره:
۱۳۹۷/۶/۱
۱۵:۴۹

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



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


 


دیدار ایران و کره از ساعت ۱۷ آغاز می‌شود.


 




کد خبر:
۴۵۱۱۵۰
| تاریخ مخابره:
۱۳۹۷/۵/۱
۱۵:۱۸

کمپنا – قرعه کشی مرحله سوم پلی آف لیگ قهرمانان اروپا انجام شد و تیم ها حریفان خود را شناختند.


 


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


 


رئال مادرید فصل گذشته با هدایت زیدان برای سومین سال پیاپی قهرمان این مسابقات شده بود.


 




کد خبر:
۴۵۰۶۹۷
| تاریخ مخابره:
۱۳۹۷/۴/۲۶
۱۶:۰۹

کمپنا – فصل جدید فوتبال ایران شروع نشده با جنجال بزرگی کلید خورد!


 


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


 


به همین بهانه، در عکس زیر بردهای دو تیم با رای انضباطی را مشاهده می‌کنید.



ساخت شبکه در تنسورفلو

در جلسه دوم آموزش تنسورفلو دو عامل داده‌ها (Tensor) و شبکه (Flow) را پارامترهای مهم در برنامه‌نویسی تنسورفلو معرفی کردیم. در پنج جلسه گذشته، بر اساس همین دو عامل بود که آموزش تنسورفلو را پیش بردیم؛ یعنی، ابتدا به نحوه تعریف داده‌ها مانند نحوه تعریف متغیرها (جلسه سوم) و تعریف آرایه‌ها (جلسه چهارم) پرداختیم. بعد از اینکه نحوه تعریف داده‌ها را یاد گرفتیم، باید می‌آموختیم که گراف یا شبکه مدنظرمان را بسازیم. برای ساختن گراف یا شبکه نیاز داریم عملیات جبری در تنسورفلو را یاد بگیریم که به‌همین دلیل جلسه پنجم را به عملیات جبری در تنسورفلو اختصاص دادیم. حال، آماده‌ایم که در تنسورفلو گراف یا شبکه بسازیم و برای شبکه ساده‌مان ورودی تعریف کنیم و خروجی‌هایش را مشاهده کنیم. البته، هنوز زمان مناسبی برای ساخت شبکه‌های عصبی مانند شبکه‌های کانولوشنی نیست و در این جلسه می‌خواهیم درمورد گراف‌های کوچک و ساده با عملیات جبری در قالب یک مثال توضیح دهیم. با ششمین جلسه آموزش تنسورفلو یعنی ساخت شبکه در تنسورفلو در کمپنا همراه باشید…


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

graph

بیایید ابتدا ورودی‌ها را تعریف کنیم؛ با توجه به شبکه، سه ورودی ثابت 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

برای تسلط بیشتر، پیشنهاد می‌کنیم تمرینات زیر را انجام دهید:

  1. ورودی‌های متفاوت بدهید و خروجی را مشاهده کنید.
  2. آیا می‌توان ورودی‌های برداری یا ماتریسی تعریف کرد؟ اگر نمی‌شود، شبکه را طوری تغییر دهید که ورودی‌های با ابعاد مختلف دریافت کند.

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


کد خبر:
۴۳۰۲۵۷
| تاریخ مخابره:
۱۳۹۷/۴/۲۱
۰۰:۵۹

کمپنا – ایوان پریشیچ به عنوان بهترین بازیکن دیدار کرواسی – انگلیس انتخاب شد.


 


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


 


کرواسی با برتری ۲ بر یک مقابل انگلیس حریف فرانسه در فینال جام جهانی ۲۰۱۸ شد.