<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های ایلیا</title>
        <link>https://virgool.io/feed/@eilya</link>
        <description>Python{Django}, PHP{Laravel}, Javascript{ReactJS}, Linux{LPIC1,2,3}, Newtwork{CCNA}</description>
        <language>fa</language>
        <pubDate>2026-06-16 21:52:52</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/94165/avatar/yYGhgp.png?height=120&amp;width=120</url>
            <title>ایلیا</title>
            <link>https://virgool.io/@eilya</link>
        </image>

                    <item>
                <title>تفاوت بین batch_size ،epoch و iterations</title>
                <link>https://virgool.io/@eilya/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%A8%DB%8C%D9%86-batchsize-epoch-%D9%88-iterative-bjji7liiwozf</link>
                <description>تفاوت بین batch_size ،epoch و iterations حتماً برای شما هم پیش اومده که به مانیتور نگاه کنید و سرتونو بخارید و از خودتون بپرسید &quot;چرا این سه عبارت را در کُدهام می‌نویسم؟ اصلاً فرقشون چیه؟&quot; چرا که خیلی شبیه هم هستند.برای فهمیدن تفاوت بین این اصطلاحات، باید برخی از مفاهیم و اصطاحات یادگیری ماشین مانند گرادیان کاهشی را بدانید تا به درک بهتر شما کمک کند.در ادامه بصورت خیلی خلاصه به مفهوم گرادیان کاهشی اشاره می‌کنم.گرادیان کاهشییک الگوریتم بهینه سازی تکراری هستش که در یادگیری ماشین برای پیدا کردن بهترین نتیجه(کمترین مقدار یک منحنی) استفاده می‌شود.در واقع گرادیان به معنای میزان شیب یا انحطاط یک شیب و کاهشی به معنای نزول یا همان کاهش است.منظور از اینکه می‌گوییم، الگوریتم تکراری است به این معناست که باید چندین مرتبه نتایج را بدست آوریم تا بهینه‌ترین نتیجه حاصل شود. کیفیت تکرار گرادیان کاهشی به یک گراف وابسته کمک می‌کند تا نمودار را به طور بهینه با داده‌ها مطابقت دهد.گرادیان کاهشی پارامتری به نام نرخ یادگیری دارد. همانطور که در شکل بالا (سمت چپ) می‌بینید، گام‌های ابتدایی بزرگتر هستند، این بدین معناست که میزان یا نرخ یادگیری بالاتر است و با پایین آمدن نقطه، میزان یادگیری با اندازه‌های کوتاه‌تر مراحل، کمتر می‌شود. همچنین، تابع هزینه نیز در حال کاهش است. گاهی اوقات ممکن است افرادی را مشاهده کنید که می گویند تابع ضرر در حال کاهش است یا زیان در حال کاهش است، هزینه و ضرر هر دو یک چیز را نشان می دهند (اینکه ضرر/هزینه ما در حال کاهش است چیز خوبی است).ما به اصطلاحاتی مانند دوره‌ها(epochs)، اندازه دسته‌ای(batch size) و تکرارها(iterations) فقط زمانی نیاز داریم که داده‌ها خیلی بزرگ باشند، که این مورد همیشه در یادگیری ماشین اتفاق می‌افتد و ما نمی‌توانیم همه داده‌ها را به یکباره به سیستم منتقل کنیم. درنتیجه، برای غلبه بر این مشکل باید داده‌ها را به اندازه‌های کوچکتر تقسیم کرده و یکی یکی به سیستم خود بدهیم و وزن شبکه‌های عصبی را در پایان هر مرحله به‌روز کنیم تا با داده‌های ورودی مطابقت داشته باشد.دروره‌ها(epochs)یک دوره یا epoch زمانی است که کل مجموعه داده تنها یک بار از طریق شبکه عصبی به جلو و عقب منتقل می‌شود.از آنجایی که یک دوره آنقدر بزرگ است که نمی‌توان آن را به یکباره به سیستم وارد کرد، آن را به چند دسته کوچکتر تحت عنوان دوره یا epoch تقسیم می‌کنیم.چرا از بیش از یک دوره یا epoch استفاده می کنیم؟همه‌ی ما می‌دانیم که انتقال کل مجموعه داده از طریق یک شبکه عصبی کافی نبوده و باید مجموعه داده را چندین بار به یک شبکه عصبی ارسال کنیم. اما به خاطر داشته باشید که ما از یک مجموعه داده محدود استفاده می کنیم و برای بهینه سازی یادگیری و نمودار از گرادیان کاهشی استفاده می‌کنیم که فرآیندی تکراری است. بنابراین، به روزرسانی وزن‌ها با یک با پاس دادن یا یک دوره کافی نیست.در واقع؛ یک دوره یا epoch منجر به عدم تناسب منحنی در نمودار (زیر) می‌شود.با افزایش تعداد دوره‌ها(epochs)، تعداد دفعات تغییر وزن در شبکه عصبی بیشتر می‌شود و منحنی از کم‌برازش(Underfitting) به منحنی بهینه(Optimal) و بعد به منحنی بیش‌برازش(Overfitting) می‌رود.خُب، پس تعداد مناسب دوره‌ها(epochs) چقدر است؟متاسفانه پاسخ درستی برای این سوال وجود ندارد. پاسخ برای مجموعه داده‌های مختلف متفاوت است، اما می‌توانید بگویید که تعداد دوره‌ها به تنوع داده‌های شما مربوط می‌شود... بعنوان مثال - آیا فقط گربه‌های سیاه در مجموعه داده‌های خود دارید یا مجموعه داده‌ها بسیار متنوع‌تر است؟اندازه دسته(Batch Size)تعداد کل نمونه های آموزشی موجود در یک دسته.توجه: اندازه دسته(batch size) و تعداد دسته(number of batches) دو چیز متفاوت هستند.اما دسته(batch) چیست؟همانطور که گفتم، شما نمی‌توانید کل مجموعه داده را به یکباره به شبکه عصبی منتقل کنید. بنابراین، مجموعه داده‌ها را به تعداد دسته‌ها یا مجموعه‌ها یا قطعات تقسیم می‌کنید.درست مثل اینکه شما یک مقاله بزرگ را به مجموعه‌ها/دسته‌ها/قسمت‌های متعددی مانند مقدمه، گرادیان کاهشی، دوره(epoch)، اندازه دسته‌ای(batch size) و تکرار(iteration) تقسیم می‌کنید که خواندن کل مقاله و درک آن را برای خواننده آسان باشد. ?تکرارها(iterations)برای بدست آوردن تکرارها فقط باید جداول ضرب را بدانید یا ماشین حساب داشته باشید.تکرارها؛ تعداد دسته‌های(batch) مورد نیاز برای تکمیل یک دوره(epoch) است.توجه: تعداد دسته‌ها(batchs) برابر است با تعداد دفعات یک دوره(epoch).فرض کنید 2000 نمونه آموزشی داریم که قرار است از آنها استفاده کنیم.ما می‌توانیم مجموعه داده‌های 2000 نمونه را به دسته‌های(batchs) 500 تایی تقسیم کنیم، سپس 4 تکرار(iteration) طول می‌کشد تا یک دوره(epoch) کامل شود.که در آن اندازه دسته 500، تکرارها 4 که برای 1 دوره کامل است.منبع: https://towardsdatascience.com/epoch-vs-iterations-vs-batch-size-4dfb9c7ce9c9</description>
                <category>ایلیا</category>
                <author>ایلیا</author>
                <pubDate>Sat, 15 Jan 2022 03:12:35 +0330</pubDate>
            </item>
                    <item>
                <title>نصب پایتون 3.6.4 بر روی CentOS 7</title>
                <link>https://virgool.io/@eilya/%D9%86%D8%B5%D8%A8-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-364-%D8%A8%D8%B1-%D8%B1%D9%88%DB%8C-centos-7-jsrgl8nmujph</link>
                <description>نصب پایتون 3.6.4 بر روی CentOS 7این روش ساده ترین متد برای نصب پایتون روی سیستم عامل CentOS 7 می باشد. در اینجا، ما به سادگی یک مخزن(ius-release) اضافه می کنیم که نسخه از پیش کامپایل شده را برای نصب آماده کرده است.گام اول:دستور زیر را برای افزون مخزن مورد نظر به yum را اجرا می کنیم.sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpmگام دوم:برای اضافه کردن مخزن، yum را آپدیت می کنیم.sudo yum updateگام سوم:دستور زیر پایتون را بهمراه pip که برای نصب پکیج برای پایتون می باشد را نیز نصب می کند.sudo yum install -y python36u python36u-libs python36u-devel python36u-pipگام اختیاری:درصورتی که می خواهید یک محیط ایزوله برای پایتون درست کنید از دستورات زیر استفاده می کنیم.sudo pip3.6 install --upgrade pip    #بروزرسانی pip
sudo pip3.6 install virtualenv          # نصب پکیج مورد نظر
cd ~                             # تغیر مسیر به ~
virtualenv eilya-env                     # ایجاد محیط ایزوله با نام eilya-env
source ~/eilya-env/bin/activate   # فعالسازی محیط ایزولهدر آخر برای غیر فعالسازی محیط ایزوله از دستور زیر استفاده می کنیم.deactivateگام آخر:پس از اجرای دستورات بالا، به سادگی با اجرای دستور زیر می توانید بررسی کنید که آیا نسخه صحیح پایتون نصب شده است یا نه:python3.6 -V</description>
                <category>ایلیا</category>
                <author>ایلیا</author>
                <pubDate>Fri, 13 Dec 2019 23:45:19 +0330</pubDate>
            </item>
                    <item>
                <title>ایجاد هاست و دامین onion با nginx و tor</title>
                <link>https://virgool.io/ARMINLATIFI320/%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%D9%87%D8%A7%D8%B3%D8%AA-%D9%88-%D8%AF%D8%A7%D9%85%DB%8C%D9%86-onion-%D8%A8%D8%A7-nginx-%D9%88-tor-om8yrvs0unqq</link>
                <description>دامنه onionدامنه onion یک پسوند دامنه سطح‌بالا است که دسترسی را به سرویس‌های پنهانی ناشناس از طریق شبکه تور ممکن می‌سازد. چنین آدرس‌هاییدی‌اِن‌اِس واقعی نیستند، اما با نصب نرم‌افزار پروکسی مناسب، برنامه‌های اینترنتی مانند مرورگرهای وب می‌توانند به سایت‌هایی با آدرس‌های .onion با ارسال درخواست از طریق شبکه سرور تور دسترسی پیدا کنند. هدف اصلی استفاده از چنین سیستمی این است ردیابی شخص ارائه‌دهندهٔ اطلاعات (برای مثال فروشنده) و شخصی که قصد دسترسی به آن را دارد (خریدار) را دشوار یا غیرممکن کند.گام اول:حداقل نیازمندی سخت افزاری برای نصب بر روی سیستم عامل CentOS7CPU - 1CoreRAM - 1GBHDD - 20GBگام دوم:دانلود و نصب سیستم عامل لینوکس CentOS7 نسخه مینیمال از اینجا(یا هر کجا)گام سوم:نصب پکیج هابروزرسانی سیستم عاملsudo yum update -yنصب ریپازیتوری epel-releasesudo yum install epel-release -yنصب انجینکس(nginx) و تور(tor)sudo yum install nginx tor -yگام چهارم:پیکربندی انجینکس (nginx)وب سرور nginx بصورت پیش فرض پورت 80 را برای دریافت و ارسال درخواست ها استفاده می کند، می خواهیم بجای پورت 80 از پورت 9000 استفاده کنیم، چون پورت 80 قرار است توسط تور استفاده شود.sudo sed -i      &#039;s/listen \+80 default_server/listen 9000 default_server/&#039;      /etc/nginx/nginx.conf

sudo sed -i      &#039;s/listen \+\[\:\:\]\:80 default_server/listen [::]:9000 default_server/&#039;      /etc/nginx/nginx.confوب سرور nginx را ابتدا در استارت آپ قرار می دهیم تا با هر بار راه اندازی سیستم عامل اجرا شودsudo systemctl enable nginxبعد از اعمال تغییرات باید وب سرور nginx را مجدداً راه اندازی کنیمsudo systemctl restart nginxبرای مطلع شدن از وضعیت وب سرور nginx دستور زیر را وارد می کنیم، در صورت ظاهر شدن نوشته سبز رنگ active، از راه اندازی بدون ایراد nginx مطمئن می شویم.sudo systemctl status nginxگام پنجم:پیکربندی تور(tor)فایل موجود در مسیر زیر را باز کرده /etc/tor/torrcسپس بعد از عبارت #HiddenServicePort 22 127.0.0.1:22   #خط 83خط های زیر را اضافه می کنیم:HiddenServiceDir /var/lib/tor/hidden_service_01/
HiddenServicePort 80 127.0.0.1:9000توجه: برای راحتی کار، دستور زیر این کار را بصورت خودکار انجام می دهد.sudo sed -i &#039;s/\#HiddenServicePort 22 127\.0\.0\.1\:22/#HiddenServicePort 22 127.0.0.1:22\n\nHiddenServiceDir \/var\/lib\/tor\/hidden_service_01\/\nHiddenServicePort 80 127.0.0.1:9000/&#039; /etc/tor/torrcپیکربندی انجام شده بصورت پیش فرض با SELinux حالت (enforcing mode) سازگار نیست. این سرویس در اولین راه اندازی tor به درستی اجرا می شود، بعد از راه اندازی مجدد سرویس تور یا راه اندازی مجدد سیستم عامل دیگر شروع نمی شود. برای رفع این مشکل به پیشنهاد آقای مایکل این تنظیمات را اعمال می کنیم:sudo sed -i &#039;s/User toranon/#User toranon/&#039; /usr/share/tor/defaults-torrc

sudo mkdir /etc/systemd/system/tor.service.d; sudo touch /etc/systemd/system/tor.service.d/override.conf

echo -e &#039;[Service]\nUser=toranon\nGroup=toranon\nPermissionsStartOnly=no\n&#039; | sudo tee --append /etc/systemd/system/tor.service.d/override.confهمانند وب سرور nginx، تور(tor) را ابتدا در استارت آپ قرار می دهیم تا با هر بار راه اندازی سیستم عامل اجرا شود.sudo systemctl enable torبعد از اعمال تغییرات باید تور(tor) را مجدداً راه اندازی کنیمsudo systemctl restart torبرای مطلع شدن از وضعیت تور(tor) دستور زیر را وارد می کنیم، در صورت ظاهر شدن نوشته سبز رنگ active، از راه اندازی بدون ایراد تور مطمئن می شویم.sudo systemctl status torهم اکنوان آدرس دامنه onion ما در مسیر زیر داخل فایل hostname ایجاد شده است:/var/lib/tor/hidden_service_01/hostnameبرای مشاهده دامنه دستور زیر را وار می کنیم:sudo cat /var/lib/tor/hidden_service_01/hostnameنتیجه اجرای دستور چیزی شبیه به این خواهد بود:skqjtnyiv2dityzsovang3xyh7bphktkodu4pcmpenuu6oxr4mv6hbyd.onionواین دامنه شما می باشد.برای مشاهده دامنه این آدرس را در مرورگر تور وارد کنید، صفحه پیش فرض وب سرور nginx را مشاهده خواهید کرد.برگرفته و ترجمه شده از اینجا</description>
                <category>ایلیا</category>
                <author>ایلیا</author>
                <pubDate>Thu, 12 Dec 2019 00:14:06 +0330</pubDate>
            </item>
                    <item>
                <title>نحوه اجرای جنگو با استفاده از uWSGI</title>
                <link>https://virgool.io/@eilya/%D9%86%D8%AD%D9%88%D9%87-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D8%AC%D9%86%DA%AF%D9%88-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-uwsgi-oaysjjljmw8e</link>
                <description>نحوه اجرای جنگو با استفاده از uWSGIuWSGI یک نرم‌افزار کاربردی پر سرعت کد نویسی شده با زبان سی(C)، با هدف توسعه full stack برای ساختمان خدمات میزبانی می باشد، که پس از وب سرور رابط دروازه(WSGI) که اولین افزونه‌های پشتیبانی شده توسط این پروژه است.uWSGI اغلب برای ارتباط بین برنامه کاربردی وب پایتون با وب سرور‌هایی مانند چروکی و Nginx استفاده می‌شود.پیش نیازهای uWSGI:ویکی uWSGI چندین روش نصب را شرح می دهد. با استفاده از پیپ(pip) ، مدیر بسته پایتون ، می توانید هر نسخه uWSGI را با یک فرمان واحد نصب کنید. بعنوان مثال ما در اینجا 2روش نصب را آوردیم:# Install current stable version.
$ pip install uwsgi
# Or install LTS (long term support).
$ pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gzمدل uWSGI:uWSGI بر روی مدل کلاینت-سرور کار می کند. سرور وب شما (به عنوان مثال nginx  یا Apache) برای ارائه محتوای پویا با یک فرآیند &quot;worker&quot;  با django-uwsgi ارتباط برقرار می کند.پیکربندی و راه اندازی سرور uWSGI برای جنگو:uWSGI  از روشهای مختلفی برای پیکربندی پشتیبانی می کند. برای مطالعه بیشتر اسناد پیکربندی uWSGI را ببینید.برای شروع ما روش زیر برای پیکربندی سرور uWSGI تشریح می کنیم:uwsgi --chdir=/path/to/your/project \
--module=mysite.wsgi:application \
--env DJANGO_SETTINGS_MODULE=mysite.settings \
--master --pidfile=/tmp/project-master.pid \
--socket=127.0.0.1:49152 \
--processes=5 \
--uid=1000 --gid=2000 \
--harakiri=20 \
--max-requests=5000 \
--vacuum \
--home=/path/to/virtual/env \
--daemonize=/var/log/uwsgi/yourproject.logبرفرض شما یک پروژه سطح بالا با نام mysite دارید که درون آن یک فایل به اسم wsgi.py در مسیر (mysite/wsgi.py) حاوی یک شی از برنامه WSGI می باشد. این طرحی است که شما با اجرای دستور زیر ایجاد می شود:$ django-admin startproject mysiteتوجه: بجای mysite می توانید از نام پروژه خود استفاده کنید.در صورتی که فایل wsgi.py وجود نداشته باشد، باید آن را بصورت دستی ایجاد کنید و با مطالعه اسناد توسعه WSGI محتوای پیش فرض را به آن اضافه کنید.گزینه های ویژه جنگو در اینجا عبارتند از:chdir:  آدرس دایرکتوری که باید در مسیر ایمپورت پایتون باشد – بعنوان مثال: دایرکتوری حاوی پکیج mysqitemodule: ماژول WSGI برای استفاده - ماژول mysite.wsgi که startproject ایجاد می کند.env: باید شامل فایل تنظیمات پروژه جنگو DJANGO_SETTINGS_MODULE باشد.home: یک مسیر اختیاری به virtualenv پروژه شما.یک نمونه از فایل پیکربندی بصورت ini:[uwsgi]
chdir=/path/to/your/project
module=mysite.wsgi:application
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/yourproject.logبرای استفاده از فایل پیکربندی کافیست کد زیر را اجرا کنید:uwsgi --ini uwsgi.iniبرگرفته و ترجمه شده از اینجا</description>
                <category>ایلیا</category>
                <author>ایلیا</author>
                <pubDate>Thu, 05 Dec 2019 15:54:37 +0330</pubDate>
            </item>
            </channel>
</rss>