<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محسن جلالی</title>
        <link>https://virgool.io/feed/@itsmohsenjalali</link>
        <description>عاشق یادگیری</description>
        <language>fa</language>
        <pubDate>2026-06-20 08:06:12</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/44703/avatar/PJJ30c.png?height=120&amp;width=120</url>
            <title>محسن جلالی</title>
            <link>https://virgool.io/@itsmohsenjalali</link>
        </image>

                    <item>
                <title>اصطلاحات رایج دنیای فناوری (قسمت اول)</title>
                <link>https://virgool.io/@itsmohsenjalali/%D8%A7%D8%B5%D8%B7%D9%84%D8%A7%D8%AD%D8%A7%D8%AA-%D8%B1%D8%A7%DB%8C%D8%AC-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%81%D9%86%D8%A7%D9%88%D8%B1%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-jrwws0sld9or</link>
                <description>چرا از HTTPS استفاده می‌کنیم؟در حالت http، ما دیتا را بین سرور و کلاینت به صورت plain text رد و بدل می‌نماییم یا به بیان ساده‌تر به همان شکل که می‌نویسیم به همان صورت دیتا را بین سرور و کلاینت منتقل می‌کنیم ولی نکته اینجاست که این دیتا ممکنه توسط هکرها در سطح شبکه شنود بشه و از این دیتا برای اهداف مخرب استفاده بشه به این نوع حملات man in the middle یا مردی در میان گفته می‌شود.ما برای اینکه امنیت سرور و کلاینت را برقرار کنیم از پروتکل یا قراردادی به نام ssl استفاده می‌کنیم که http را به https تبدیل می‌کنه و دیتایی که بین سرور و کلاینت رد و بدل میشه رو رمزنگاری می‌کنه. دلیل دیگه‌ای که برای استفاده از https داریم این هست که سرعت https از http ورژن ۲ بیشتره برای همین بهتره که از https استفاده کنیم.کوچک کردن کد یا code minification چیست؟به عملیاتی که در آن عبارات اضافی مانند فضای خالی، کامنت‌ها و ... حذف می‌شوند بدون اینکه ماهیت کد تغییر کند را code minification می‌گویند. این عملیات باعث می‌شود خوانایی کد به شدت پایین بیاید اما در عوض سرعت اجرای و انتقال آن تحت اینترنت به شدت افزایش پیدا می‌کند از این روش فقط برای اجرای برنامه استفاده می‌شود ولی برای توسعه و نگه‌داری کد از این روش استفاده نمی‌شود.نمونه‌ی code minification تبدیل فایل‌های با پسوند py به فایل‌هایی با پسوند pyc است که سرعت اجرای برنامه های پایتونی را افزایش می‌دهد. code minification در تمام زبان‌ها مورد استفاده قرار می‌گیرد ولی استفاده از آن در زبان جاوا اسکریپت بسیار مهم و تاثیر گذار است زیرا کدهای جاوا اسکریپت تحت اینترنت منتقل می‌شوند و در کلاینت مقصد اجرا می‌شوند پس کم بودن حجم کد در زمان انتقال و اجرای ان در سمت کاربر بسیار تاثیر گذار است و باعث کاهش زمان لود صفحات یک سایت می‌شود.رایانش ابری یا cloud چیست؟در سال‌های اخیر ما با مفهومی به نام سرور آشنا شدیم و از سرور برای بارگذاری سایت‌ها استفاده می‌کردیم تا مفهومی به نام cloud معرفی شد. فرض کنید که شما یک سایت فروشگاهی دارید که تعداد یوزر‌های شما یک مقدار مشخصی است و برای این فروشگاه شما از یک سرور استفاده می‌کنید حال بر اثر محبوبیت و کالاهایی که شما در فروشگاهتون عرضه می‌کنید این فروشگاه معروف شد و تعداد کاربر شما چندین برابر شد خوب در اینجا شما مجبورید که یک سرور دیگه اضافه کنید تا بتونید به نیاز کاربرانتون پاسخ بدید اما وقتی بررسی می‌کنید می‌بینید که در ساعات و روزهای خاصی تعداد یوزر و درخواست شما اونقدر زیاد میشه که به یک سرور اضافه نیاز دارید ولی خارج از اون زمان‌های خاص شما عملا از منابع سرور اضافه استفاده نمی‌کنید خوب راه حل چیست؟استفاده از فضای ابری این امکان رو به شما می‌ده که یک سرور برای بارگذاری فروشگاهتون داشته باشید و در مواقعی که به سرور و منابع بیشتری نیاز دارید اون رو در اختیارتون میزاره و زمانی که دیگه نیاز نداشتید اون رو ازتون میگیره که این باعث میشه منابع شما بهینه مورد استفاده قرار بگیرند. این مطلب صرفا توضیحات کلی در مورد فضای ابری بود برای بدست اوردن اطلاعات بیشتر بهتون توصیه می‌کنم حتما گوگل کنید (توی گوگل در موردش سرچ کنید).میکرو سرویس چیست؟یه خونه رو در نظر بگیرید انواع وسایل و تجهیزات توی خونه هست که همشون زندگی رو برای ما راحت‌تر می‌کنند حال شما اگه روزی تصمیم گرفتید که یخچالتون رو عوض کنید و ارتقا بدید بدون اینکه بقیه‌ی وسایل خونه تغییری کنن شما می‌تونید اینکار رو انجام بدید و فقط یخچالتون رو عضو می‌کنید یا اگه روزی سشوارتون خراب شد بقیه وسایل خونه مشکلی براشون پیش نمیاد و شما سشوارتون رو می‌برید به تعمیرگاه و درستش می‌کنید.حالا بیاید سایت گوگل رو در نظر بگیریم که قسمت‌های مختلفی داره که هر کدوم هم با یک زبان برنامه نویسی نوشته شده‌اند برای مثال قسمت احراز هویت، قسمت انتشار ویدیو، قسمت بارگذاری فایل و ... تمام این قسمت‌ها ماژول‌های جداگانه‌ای هستند که مستقل از هم اجرا می‌شوند و کار می‌کنند ولی در عین حال به وسیله‌ی API هایی با یکدیگر در ارتباطند. هر کدام از این قسمت ها توسط یک تیم مستقل و یک زبان متفاوت با زبان دیگر قسمت ها توسعه پیدا می‌کنند به این سبک از پیاده‌سازی میکروسرویس گفته می‌شود. </description>
                <category>محسن جلالی</category>
                <author>محسن جلالی</author>
                <pubDate>Thu, 08 Oct 2020 17:21:57 +0330</pubDate>
            </item>
                    <item>
                <title>هوش مصنوعی برای تشخیص بیماری (بخش پنجم)</title>
                <link>https://virgool.io/AIforMedical/%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D8%A8%DB%8C%D9%85%D8%A7%D8%B1%DB%8C-%D8%A8%D8%AE%D8%B4-%D9%BE%D9%86%D8%AC%D9%85-pll8be0clons</link>
                <description>سه چالش عمده در دسته‌بندی کردن تصاویر پزشکی سه عنوان مطرح شده از چالش‌های عمده در کار با داده‌های پزشکی است که برای هر کدام تکنیک‌هایی برای برطرف کردن این چالش‌ها مطرح می‌کنیمچالش class imbalanceچالش class imbalance از آنجا پدید می‌آید که تعداد بیماران از تعداد افراد سالم به مراتب کمتر است و به همین خاطر تعداد تصاویری که از بیماران وجود دارد نسبت به کل تصاویر موجود بسیار کم استاین مساله باعث می‌شه که الگوریتم در هنگام آموزش تعداد تصویری که از بیماران می‌بینه کم باشه و به همین دلیل پیش‌بینی‌ای که برای وجود بیماری انجام می‌دهد خیلی کم باشهبرای درک بهتر این مشکل به سراغ تابع loss می‌رویم به مثال زیر توجه کنیددر اینجا یک تصویر از یک بیمار داریم که الگوریتم ما پیش‌بینی کرده به احتمال ۰.۲ یا به عبارت دیگه ۲۰ درصد بیماری در تصویر وجود دارد که اگر میزان خطای الگوریتم را با توجه به این نمونه‌ی خاص محاسبه کنیم می‌شه چیزی در حدود ۷۰ درصد خطا!!!!!حالا تابع محاسبه‌ی خطا را برای یک فرد سالم اجرا می‌کنیم این تصویر یک فرد سالم است که خروجی الگوریتم ما می‌گوید ۷۰ درصد احتمال وجود بیماری در تصویر هست. برای محاسبه‌ی خطای الگوریتم با توجه به اینکه این تصویر یک فرد سالم است به سراغ عبارت دوم میرویم و خطای الگوریتم را با توجه به عبارات موجود محاسبه می‌کنیم.نتیجه‌ای که از دو مثال بالا به دست می‌آید این است که الگوریتم در تشخیص موارد بیمار خطای بسیار زیادی دارد.خوب ما استفاده از تابع محاسبه‌ی خطا را برای دو مثال دیدیم حال بهتر است آن را برای مجموعه‌ای از داده‌ها مورد بررسی قرار دهیم.هنگامی که برای بار اول الگوریتم را اجرا می‌کنیم و هنوز شروع به انجام عملیات آموزش نکرده‌ایم مقدار پیش‌بینی و خطای الگوریتم به صورت زیر است خوب که در این صورت اگه میزان خطای کل برای هر دسته را محاسبه کنیم داریم با توجه به میزان خطا برای هر دسته متوجه می‌شویم که خطا در دسته‌ی نرمال بسیار بیشتر است پس الگوریتم در حین آموزش سعی می‌کند که خطای آن دسته را کاهش دهد که باعث می‌شود خطای موجود در دسته‌ی بیمار نادیده گرفته بشود و در پایان ما به مدلی دست پیدا کردیم که در تشخصی افراد بیمار خطای بسیار زیادی دارد به دلیل اینکه تعداد موارد بیمار کم است.تکنیک اول برای حل مشکلبرای حل این مشکل می‌توان تابع محاسبه‌ی خطا را تغییر کوچکی داد که داشته باشیمدر اینجا ما به کدام از دسته‌ها وزن می‌دهیم که این وزن در محاسبه‌ی میزان خطا و در و روند آموزش مدل تغییر ایجاد می‌کند که داریمبا وزن‌دهی‌ای که به هر دسته انجام شد میزان خطای الگوریتم به ازای هر کدام از نمونه‌ها تغییر کرد و برای محاسبه‌ی خطای هر دسته داریممی‌بینیم که میزان خطای هر دو دسته باهم برابر است.به صورت کلی وزن هر دسته از فرمول زیر قابل محاسبه استدر فرمول‌های فوق negative متعلق به افراد سالم و positive متعلق به افراد بیمار است.در بخش بعدی یک تکنیک دیگه برای رفع مشکل class imbalance مطرح خواهیم کرد.</description>
                <category>محسن جلالی</category>
                <author>محسن جلالی</author>
                <pubDate>Sat, 19 Sep 2020 13:20:17 +0430</pubDate>
            </item>
                    <item>
                <title>هوش مصنوعی برای تشخیص بیماری (بخش چهارم)</title>
                <link>https://virgool.io/AIforMedical/%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D8%A8%DB%8C%D9%85%D8%A7%D8%B1%DB%8C-%D8%A8%D8%AE%D8%B4-%DA%86%D9%87%D8%A7%D8%B1%D9%85-gjqpryaabry5</link>
                <description>خوب تا اینجا با داده‌های پزشکی و نوع مشکلاتی که می‌توان با هوش مصنوعی آنها را برطرف نمود آشنا شدیم. در ادامه‌ی این دوره می‌خواهیم مدلی پیاده‌سازی کنیم که چندین بیماری را از روی تصویر اشعه‌ی ایکس (X-ray) قفسه‌ی سینه تشخیص دهد. در طول این مسیر با چالش‌های متداول برای آموزش مدل برخورد خواهیم کرد که تکنیک‌هایی برای برطرف کردن آنها مطرح می‌کنیم.تصویر اشعه‌ی ایکس قفسه‌ی سینه برای تشخیص مریضی‌هایی مانند سرطان ریه، ذات الریه و ... استفاده می‌شود. رادیولوژیست‌ها کسانی هستند که یاد میگیرن چگونه تصاویر اشعه‌ی ایکس قفسه‌ی سینه را تفسیر کنن و بیماری را تشخیص دهند. امروزه می‌توان به کامپیوتر آموزش داد که بیماری را از روی تصویر اشعه‌ی ایکس قفسه‌ی سینه تشخیص دهد.برای شروع به تفسیر اشعه‌ی ایکس قفسه‌ی سینه می‌پردازیم. در تصویر زیر دو دسته از تصاویر را می‌بینید که دسته اول مربوط به قفسه‌ی سینه‌ی بیماران است که برچسب بیمار دارد و دسته‌ی دوم مربوط به افراد سالم است که برچسب نرمال داردحال ما تصویر جدیدی به شما می‌دهیم و از شما می‌خواهیم که تشخیص دهید آیا این تصویر متعلق به دسته‌ی بیمار است یا نرمال؟خوب برای تشخیص و جواب دادن به این مساله باید شباهت تصویر داده شده را با تصویر هر دو دسته بررسی کنیم و تشخیص دهیم که این تصویر متعلق به کدام دسته است.در تصویر زیر می‌بینیم که تصویر داده شده شباهت زیادی با تصاویر دسته‌ی بیمار دارد چرا که یک اسیب بافتی در قسمت مشخص شده وجود دارد که این حالت مشترکا در تصویر دسته‌ی بیمار نیز موجود است ولی در تصویر دسته‌ی نرمال وجود نداردروش آموزش مدل دقیقا مشابه با همین روش مطرح شده است. در این روش ما هر توده یا اسیبی که قطر آن بیشتر از ۳ سانتی‌متر باشد را به عنوان بیماری در نظر می‌گیریم. در هنگام آموزش ما تصاویر را با برچسب در اختیار الگوریتم قرار می‌دهیم تا از تصاویر ورودی بتواند خروجی مورد نیاز ما را ایجاد کند. خروجی الگوریتم به صورت نمره است که احتمال وجود بیماری در تصویر را نشان می‌دهد برای فهم بهتر به تصویر زیر توجه نماییددر تصویر بالا عدد اول متعلق به عکس اول و عدد دوم متعلق به عکس دوم است. تا زمانی که مدل آموزش ندیده باشد نمره‌ی خروجی با عدد دسته‌ی حقیقی تصاویر اختلاف زیادی دارد که این خطا را با تابع loss محاسبه می‌کنند نحوه‌ی عملکرد تابع loss را در بخش های بعدی بررسی خواهیم کرد.عدد دسته‌ی بیمار ۱ و عدد دسته‌ی نرمال ۰ است. همانطور که می‌بینید ۰.۴۸ تا ۱ فاصله‌ی زیادی دارد و ۰.۵۱ هم تا ۰ فاصله‌ی زیادی دارد.هنگامی که مدل آموزش می‌بیند این نمره‌ها به اعداد هر دسته نزدیک تر می‌شوند.</description>
                <category>محسن جلالی</category>
                <author>محسن جلالی</author>
                <pubDate>Sun, 13 Sep 2020 14:16:38 +0430</pubDate>
            </item>
                    <item>
                <title>هوش مصنوعی برای تشخیص بیماری (بخش سوم)</title>
                <link>https://virgool.io/AIforMedical/%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D8%A8%DB%8C%D9%85%D8%A7%D8%B1%DB%8C-%D8%A8%D8%AE%D8%B4-%D8%B3%D9%88%D9%85-vscocootcopx</link>
                <description>در این بخش می‌خواهیم به معرفی عملیات پیش پردازش بر روی تصاویر بپردازیم.پیش‌پردازش تصاویر در کراسما قبل از آموزش مدل باید تصاویر را به گونه اصلاح کنیم که برای آموزش در شبکه های عصبی کانولوشن مناسب باشند به همین خاطر از تابع ImageDataGenerator در کتابخانه‌ی کراس استفاده می‌کنیم که عملیات preprocessing و data augmentation را برای ما انجام می‌دهد.# Import data generator from keras
from keras.preprocessing.image import ImageDataGenerator
# Normalize images
image_generator = ImageDataGenerator(
    samplewise_center=True, #Set each sample mean to 0.
    samplewise_std_normalization= True # Divide each input by its standard deviation
)استاندارد‌سازیدر کدهای بالا ما مقدار میانه تصاویر را برابر ۰ و مقدار انحراف معیار تصاویر را برابر ۱ قرار دادیم. به یه بیان دیگه میشه گفت که ما مقادیر جدیدی رو به هر پیکسل از تصویر دادیم که اون مقدار جدید از معادله‌ی زیر محاسبه میشه(x-μ)/σکه در اینجا x مقدار فعلی پیکسل هست و σ انحراف معیار و μ میانه‌ی پیکسل‌های تصاویر است.در کدهای زیر سایز تصاویر را به عنوان ورودی های شبکه‌ی عصبی کانولوشن کاهش می‌دهیم برای اینکه روند آموش سریعتر انجام شود# Flow from directory with specified batch size and target image size
generator = image_generator.flow_from_dataframe(
        dataframe=train_df,
        directory=&amp;quotnih/images-small/&amp;quot,
        x_col=&amp;quotImage&amp;quot, # features
        y_col= [&#039;Mass&#039;], # labels
        class_mode=&amp;quotraw&amp;quot, # &#039;Mass&#039; column should be in train_df
        batch_size= 1, # images per batch
        shuffle=False, # shuffle the rows or not
        target_size=(320,320) # width and height of output image
)خوب حالا تصویر اول دیتاست رو رسم می‌کنیم و باهم میبینیم که چه تغییراتی در تصویر ایجاد شده# Plot a processed image
sns.set_style(&amp;quotwhite&amp;quot)
generated_image, label = generator.__getitem__(0)
plt.imshow(generated_image[0], cmap=&#039;gray&#039;)
plt.colorbar()
plt.title(&#039;Raw Chest X Ray Image&#039;)
print(f&amp;quotThe dimensions of the image are {generated_image.shape[1]} pixels width and {generated_image.shape[2]} pixels height&amp;quot)
print(f&amp;quotThe maximum pixel value is {generated_image.max():.4f} and the minimum is {generated_image.min():.4f}&amp;quot)
print(f&amp;quotThe mean value of the pixels is {generated_image.mean():.4f} and the standard deviation is {generated_image.std():.4f}&amp;quot)خروجی قطعه کد بالا به صورت زیر استThe dimensions of the image are 320 pixels width and 320 pixels height
The maximum pixel value is 1.7999 and the minimum is -1.7404
The mean value of the pixels is 0.0000 and the standard deviation is 1.0000حال به مقایسه‌ی توزیع مقادیر پیکسل‌ها در تصویر اصلی و تصویر اصلاح شده می‌پردازیم # Include a histogram of the distribution of the pixels
sns.set()
plt.figure(figsize=(10, 7))
# Plot histogram for original iamge
sns.distplot(raw_image.ravel(), 
             label=f&#039;Original Image: mean {np.mean(raw_image):.4f} - Standard Deviation {np.std(raw_image):.4f} \n &#039;
             f&#039;Min pixel value {np.min(raw_image):.4} - Max pixel value {np.max(raw_image):.4}&#039;,
             color=&#039;blue&#039;, 
             kde=False)
# Plot histogram for generated image
sns.distplot(generated_image[0].ravel(), 
             label=f&#039;Generated Image: mean {np.mean(generated_image[0]):.4f} - Standard Deviation {np.std(generated_image[0]):.4f} \n&#039;
             f&#039;Min pixel value {np.min(generated_image[0]):.4} - Max pixel value {np.max(generated_image[0]):.4}&#039;, 
             color=&#039;red&#039;, 
             kde=False)
# Place legends
plt.legend()
plt.title(&#039;Distribution of Pixel Intensities in the Image&#039;)
plt.xlabel(&#039;Pixel Intensity&#039;)
plt.ylabel(&#039;# Pixel&#039;)</description>
                <category>محسن جلالی</category>
                <author>محسن جلالی</author>
                <pubDate>Sat, 12 Sep 2020 16:49:00 +0430</pubDate>
            </item>
                    <item>
                <title>هوش‌مصنوعی برای تشخیص بیماری (بخش دوم)</title>
                <link>https://virgool.io/AIforMedical/%D9%87%D9%88%D8%B4%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D8%A8%DB%8C%D9%85%D8%A7%D8%B1%DB%8C-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-vsrhb2raqb9h</link>
                <description>پیمایش داده‌هادر این بخش میرسم به بررسی داده‌های X-ray از قفسه‌ی سینه و پیمایش در داده‌ها و آشنا شدن با دیتاست و اعمال عملیات پیش پردازش بر روی داده‌ها (همیشه قبل از پیاده‌سازی الگوریتم های یادگیری ماشین باید اینکار رو انجام بدیم)برای کار کردن با دیتاست و انجام محاسبات ریاضی بر روی دیتا باید از کتابخونه های pandas و numpy استفاده کنیم.import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import os
import seaborn as sns
sns.set()

# Read csv file containing training datadata
train_df = pd.read_csv(&amp;quotnih/train-small.csv&amp;quot)
# Print first 5 rows
print(f&#039;There are {train_df.shape[0]} rows and {train_df.shape[1]} columns in this data frame&#039;)
#There are 1000 rows and 16 columns in this data frame
train_df.head()
#return 4 rows of data setخروجی کد بالانوع داده‌ها و بررسی مقادیر nullپس از آشنا شدن با مجموعه‌ی داده‌ها و ستون های موجود در دیتاست حال باید نوع داده‌های هر ستون و تعداد داده‌های از دست رفته در یک ستون را به دست آوریم پس دستور زیر را وارد می‌کنیم # Look at the data type of each column and whether null values are present
train_df.info()خروجی دستور بالا به صورت زیر است&lt;class &#039;pandas.core.frame.DataFrame&#039;&gt;
RangeIndex: 1000 entries, 0 to 999
Data columns (total 16 columns):
Image                 1000 non-null object
Atelectasis           1000 non-null int64
Cardiomegaly          1000 non-null int64
Consolidation         1000 non-null int64
Edema                 1000 non-null int64
Effusion              1000 non-null int64
Emphysema             1000 non-null int64
Fibrosis              1000 non-null int64
Hernia                1000 non-null int64
Infiltration          1000 non-null int64
Mass                  1000 non-null int64
Nodule                1000 non-null int64
PatientId             1000 non-null int64
Pleural_Thickening    1000 non-null int64
Pneumonia             1000 non-null int64
Pneumothorax          1000 non-null int64
dtypes: int64(15), object(1)
memory usage: 125.1+ KBدر خروجی بالا می‌بینیم که هیچ کدوم از فیلد ها NULL نیستند و در ستون سوم هم نوع داده‌های هر ستون رو می‌تونیم ببینیم (نکته‌ی قابل توجه به جز ستون Image و PatientId هر کدوم از ستون‌ها مربوط به یک بیماریه که ممکنه از در یه تصویر تشخیص داده شده باشه که مقدار هر فیلد ۰ یا ۱ هست که ۰ به معنای عدم وجود بیماری و ۱ به معنای وجود بیماری هست)چک کردن ایدی‌های یکتامرحله‌ی بعدی پیدا کردن ایدی‌های تکراری هست که ممکنه از یک مریض چندتا تصویر موجود باشه که باید مراقب اینجور رکوردها باشیم که جلوتر دلیل اون رو بررسی می‌کنیمprint(f&amp;quotThe total patient ids are {train_df[&#039;PatientId&#039;].count()}, from those the unique ids are {train_df[&#039;PatientId&#039;].value_counts().shape[0]} &amp;quot)
#The total patient ids are 1000, from those the unique ids are 928پیمایش برچسب‌ها خوب حالا باید بیایم و تمام برچسب‌های ممکن که در دیتاست داریم رو پیمایش کنیم (برچسب‌ها همون عنوان ستون ها هستند که گفتیم هر کدوم یه بیماریه)# Remove unnecesary elements
columns.remove(&#039;Image&#039;)
columns.remove(&#039;PatientId&#039;)
# Get the total classes
print(f&amp;quotThere are {len(columns)} columns of labels for these conditions: {columns}&amp;quot)#OUTPUT
There are 14 columns of labels for these conditions: [&#039;Atelectasis&#039;, &#039;Cardiomegaly&#039;, &#039;Consolidation&#039;, &#039;Edema&#039;, &#039;Effusion&#039;, &#039;Emphysema&#039;, &#039;Fibrosis&#039;, &#039;Hernia&#039;, &#039;Infiltration&#039;, &#039;Mass&#039;, &#039;Nodule&#039;, &#039;Pleural_Thickening&#039;, &#039;Pneumonia&#039;, &#039;Pneumothorax&#039;]در مرحله‌ی بعد میایم و تعداد بیماران مبتلا به هر بیماری را محاسبه می‌کنیم و نمایش می‌دهیم# Print out the number of positive labels for each class
for column in columns:
    print(f&amp;quotThe class {column} has {train_df[column].sum()} samples&amp;quot)#OUTPUT
The class Atelectasis has 106 samples
The class Cardiomegaly has 20 samples
The class Consolidation has 33 samples
The class Edema has 16 samples
The class Effusion has 128 samples
The class Emphysema has 13 samples
The class Fibrosis has 14 samples
The class Hernia has 2 samples
The class Infiltration has 175 samples
The class Mass has 45 samples
The class Nodule has 54 samples
The class Pleural_Thickening has 21 samples
The class Pneumonia has 10 samples
The class Pneumothorax has 38 samplesبا توجه به آمارهای فوق درمیابیم که نحوه‌ی توزیع بیماران در دسته بندی‌های مختلف به یک اندازه نیست. (همون مشکله class imbalance)مصورسازی داده‌هاتوی این مرحله از نام فایل تصاویر که در ستون Image موجود است استفاده می‌کنیم برای نمایش رندوم چند تصویر از دیتاست.# Extract numpy values from Image column in data frame
images = train_df[&#039;Image&#039;].values
# Extract 9 random images from it
random_images = [np.random.choice(images) for i in range(9)]
# Location of the image dir
img_dir = &#039;nih/images-small/&#039;
print(&#039;Display Random Images&#039;)
# Adjust the size of your images
plt.figure(figsize=(20,10))
# Iterate and plot random images
for i in range(9):
    plt.subplot(3, 3, i + 1)
    img = plt.imread(os.path.join(img_dir, random_images[i]))
    plt.imshow(img, cmap=&#039;gray&#039;)
    plt.axis(&#039;off&#039;)
# Adjust subplot parameters to give specified padding
plt.tight_layout()    وارسی تک عکسیخوب تا اینجا توی دیتاست خودمون پیمایش کردیم اطلاعات خوبی ازش به دست اوردیم حالا میخوایم بررسیمون رو دقیق‌تر کنیم و اطلاعات دقیق‌تری از تصاویر به دست بیاریم برای اینکار تصویر اول دیتاست رو انتخاب می‌کنیم و اطلاعاتی در مورد تعداد پیکسل، بیشترین و کمترین مقدار پیکسل و مقدار میانه‌ی و انحراف معیار مجموعه‌ی پیکسل‌ها رو چاپ می‌کنیم # Get the first image that was listed in the train_df dataframe
sample_img = train_df.Image[0]
raw_image = plt.imread(os.path.join(img_dir, sample_img))
plt.imshow(raw_image, cmap=&#039;gray&#039;)
plt.colorbar()
plt.title(&#039;Raw Chest X Ray Image&#039;)
print(f&amp;quotThe dimensions of the image are {raw_image.shape[0]} pixels width and {raw_image.shape[1]} pixels height, one single color channel&amp;quot)
print(f&amp;quotThe maximum pixel value is {raw_image.max():.4f} and the minimum is {raw_image.min():.4f}&amp;quot)
print(f&amp;quotThe mean value of the pixels is {raw_image.mean():.4f} and the standard deviation is {raw_image.std():.4f}&amp;quot)خروجی کدهای بالا به صورت زیر هستThe dimensions of the image are 1024 pixels width and 1024 pixels height, one single color channel
The maximum pixel value is 0.9804 and the minimum is 0.0000
The mean value of the pixels is 0.4796 and the standard deviation is 0.2757وارسی توزیع مقادیر پیکسل‌هاپس از نمایش تصاویر حال نوبت به رسم نمودار توزیع مقادیر پیکسل‌ها رسیده# Plot a histogram of the distribution of the pixels
sns.distplot(raw_image.ravel(), label=f&#039;Pixel Mean {np.mean(raw_image):.4f} &amp; Standard Deviation {np.std(raw_image):.4f}&#039;, kde=False)
plt.legend(loc=&#039;upper center&#039;)
plt.title(&#039;Distribution of Pixel Intensities in the Image&#039;)
plt.xlabel(&#039;Pixel Intensity&#039;)
plt.ylabel(&#039;# Pixels in Image&#039;)خروجی قطعه کد بالا به صورت زیر استText(0, 0.5, &#039;# Pixels in Image&#039;)</description>
                <category>محسن جلالی</category>
                <author>محسن جلالی</author>
                <pubDate>Sat, 12 Sep 2020 11:38:31 +0430</pubDate>
            </item>
                    <item>
                <title>هوش مصنوعی برای تشخیص بیماری (بخش اول)</title>
                <link>https://virgool.io/AIforMedical/%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D8%A8%DB%8C%D9%85%D8%A7%D8%B1%DB%8C-%D8%A8%D8%AE%D8%B4-%D8%A7%D9%88%D9%84-qcpfeo06uzts</link>
                <description>در این دوره ما به بررسی نحوه‌ی پیاده‌سازی مدل برای یادگیری تصاویر پزشکی (مانند MRI scan, X-ray) و تشخیص بیماری‌ها براساس تصاویر پزشکی می‌پردازیم که در این مسیر با چالش‌های data cleaning و image segmentation برخورد می‌کنیم. برای مثال تشخیص محل تومورها از روی تصویر ام ار ای مغز با استفاده از image segmentation.در اینجا به بررسی سه مثال از به کارگیری هوش مصنوعی در تشخیص بیماری ها می‌پردازیم.مثال اول در حیطه‌ی پوست است که عکس بخشی از پوست که رنگ و شکل آن تغییر کرده است را به سیستم می‌دهیم و سیستم تشخیص می‌دهد که آیا این شخص سرطان پوست دارد یا نه که این سیستم به وسیله‌ی ۱۲۹۰۰۰ تصویر از پوست با برچسب گذاری و توسط شبکه عصبی کانولوشنال آموزش داده می‌شود.مثال دوم در حیطه‌ی چشم پزشکی است که مجموعه‌ای ۱۲۸۰۰۰ تایی از تصاویر پشت چشم اماده شده که توسط جمعی از متخصصان برچسب گذاری شده است که شامل افرادی است که مبتلا به دیابت هستند و به خاطر دیابت بینایی خود را از دست داده‌اند. چالشی که در این بخش با آن روبه‌رو هستیم این است که ۳۰ درصد تصاویر مربوط به بیماران واقعی ایست و ۷۰ درصد تصاویر مربوط افراد سالم است. به این مشکل class imbalance گفته می‌شود که در ادامه راهکارهای برای مقابله با این چالش مطرح می‌شود. مثال سوم در مورد تصاویر میکروسکوپ از بافت بین سلول‌هاست. در سال ۲۰۱۷ تحقیقاتی انجام شد که در آن شبکه‌ی عصبی‌ای آموزش داده شد که گسترش یا عدم گسترش سلول‌های سرطانی را از روی تصاویر میکروسکوپیک تشخیص می‌داد. نکته‌ی قابل توجه در کار کردن با تصاویر میکروسکوپیک رزلوشن بسیار بالای این تصاویر است که ما مستقیم نمی‌توانیم آنها را به شبکه بدهیم در عوض آنها را به تکه‌های کوچکتر تقسیم کرده و سپس آنها را برای آموزش در اختیار شبکه قرار می‌دهیم.</description>
                <category>محسن جلالی</category>
                <author>محسن جلالی</author>
                <pubDate>Fri, 11 Sep 2020 20:41:54 +0430</pubDate>
            </item>
                    <item>
                <title>فصل دوم هکر قانومند ورژن 10</title>
                <link>https://virgool.io/CEHV10/%D9%81%D8%B5%D9%84-%D8%AF%D9%88%D9%85-%D9%87%DA%A9%D8%B1-%D9%82%D8%A7%D9%86%D9%88%D9%85%D9%86%D8%AF-%D9%88%D8%B1%DA%98%D9%86-10-rynuc0m14zb8</link>
                <description>در فصل دوم که عنوان فصل جمع اوری اطلاعات (Footprinting &amp; Reconnaissance) هست به روش ها و منابع موجود برای جمع اوری اطلاعات و اهمیت اطلاعات بدست امده در این مرحله می پردازیم.مرحله ی جمع اوری اطلاعات مرحله ای بسیار مهم برای انجام تست نفوذ است. یک از روش های بسیار کار آمد و جالب جمع اوری اطلاعات که ما در این فصل به ان می پردازیم گوگل هکینگ است که در به دست اوردن اطلاعات و اسیب پذیری سایت ها کاربردی است به همین دلیل پیشنهاد می کنم برای به دست اوردن توانایی بیشتر در این مبحث کتابی که لینکش رو براتون قرار میدم حتما مطالعه کنین.کتاب گوگل هکینگاسلاید های فصل دوم</description>
                <category>محسن جلالی</category>
                <author>محسن جلالی</author>
                <pubDate>Fri, 10 Jan 2020 11:35:14 +0330</pubDate>
            </item>
                    <item>
                <title>ادامه ی فصل یک</title>
                <link>https://virgool.io/CEHV10/%D8%A7%D8%AF%D8%A7%D9%85%D9%87-%DB%8C-%D9%81%D8%B5%D9%84-%DB%8C%DA%A9-patuhkca2op0</link>
                <description>Introduction to Ethical Hackingقسمت انتهایی فصل یک هکر قانومند که تونستیم فصل یک رو به صورت کامل و مطابق با سرفصل های ceh v10 مورد بررسی و تجزیه و تحلیل قرار بدیم.توی این فصل به بررسی و تعریف یکسری از مفاهیم پایه در دنیای امنیت می پردازیم. فصل اول دوره ی هکر قانونمند بسیار مهم و پایه ای هست پیشنهاد من برای اینکه این مفاهیم براتون قابل فهم تر بشه اینه که اخبار دنیای امنیت رو پیگیری کنید.دانلود کل فصل یک</description>
                <category>محسن جلالی</category>
                <author>محسن جلالی</author>
                <pubDate>Fri, 10 Jan 2020 11:07:18 +0330</pubDate>
            </item>
                    <item>
                <title>فصل اول هکر قانونمند</title>
                <link>https://virgool.io/CEHV10/%D9%81%D8%B5%D9%84-%D8%A7%D9%88%D9%84-%D9%87%DA%A9%D8%B1-%D9%82%D8%A7%D9%86%D9%88%D9%86%D9%85%D9%86%D8%AF-dbatxhebekxk</link>
                <description>جلسه ی سومدر این جلسه ما فصل اول هکر قانونمند رو اغاز کردیم همون طور که از اسم این فصل پیداست (Introduction to Ethical Hacking) توی این فصل به بررسی و تعریف یکسری از مفاهیم پایه در دنیای امنیت می پردازیم. فصل اول دوره ی هکر قانونمند بسیار مهم و پایه ای هست پیشنهاد من برای اینکه این مفاهیم براتون قابل فهم تر بشه اینه که اخبار دنیای امنیت رو پیگیری کنید.لینک سایت خبری هکر نیوزدانلود اسلاید بخش اول فصل اول : دانلود</description>
                <category>محسن جلالی</category>
                <author>محسن جلالی</author>
                <pubDate>Mon, 02 Dec 2019 01:16:01 +0330</pubDate>
            </item>
                    <item>
                <title>اموزش نصب kali و دستورات پرکاربرد ترمینال لینوکس</title>
                <link>https://virgool.io/CEHV10/%D8%A7%D9%85%D9%88%D8%B2%D8%B4-%D9%86%D8%B5%D8%A8-kali-%D9%88-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA-%D9%BE%D8%B1%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF-%D8%AA%D8%B1%D9%85%DB%8C%D9%86%D8%A7%D9%84-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-lyyg7msdg7og</link>
                <description>جلسه ی دوم در این جلسه نحوه ی نصب سیستم عامل لینوکس (توزیع کالی) را روی vmware توضیح دادیم.دانلود سیستم عامل کالی لینوکس : لینک (نکته : توجه داشته باشید با توجه به سخت افزار سیستم خودتون یکی از فایل های iso رو دانلود کنید.)توضیحات مربوط به نصب سیستم عامل کالی لینوکس : لینکدانلود نرم افزار vmware : لینکنرم افزار دیگری مانند  vmware هست به نام virtualbox که برخلاف vmware که پولیه نرم افزار virtualbox رایگانه دوستانی که به حق کپی رایت احترام میزارن میتونن به جای vmware از virtualbox استفاده کنند.دانلود نرم افزار virtualbox : لینکالبته گفتیم که روش دیگر استفاده از کالی لینوکس به صورت مجازی این هست که یکی از فایل های زیر رو دانلود کنید و به vmware یا virtualbox خودتون اضافه کنید :مخصوص vmware  برای سیستم های 32 بیتی : دانلودمخصوص vmware  برای سیستم های 64 بیتی : دانلودمخصوص virtualbox برای سیستم های 32 بیتی : دانلودمخصوص virtualbox برای سیستم های 64 بیتی : دانلودنکته: توصیه میشه که حتما خودتون سیستم عامل کالی رو دانلود کنید و نصب کنید تا روش نصب درست رو یاد بگیریدبعضی از دوستان میخواستند سیستم عامل کالی لینوکس رو از پایه نصب کنن یا به عبارت دیگه در کنار سیستم عامل ویندوزشون به صورت dual boot داشته باشن که میتونن از اینجا نحوه ی نصب رو مطالعه کنند.در اخر در اسلاید ها 50 دستور پرکاربرد ترمینال اورده شد که برای اینکه نحوه ی استفاده از اونها رو متوجه بشید می تونید از دستور man به صورت زیر استفاده کنید:man commandبرای مثال داریم :$ man pwd
DESCRIPTION
The pwd utility writes the absolute pathname of the current working directory to the standard output.

Some shells may provide a builtin pwd command which is similar or  identical to this utility.  Consult the builtin(1) manual page.

The options are as follows:

-L      Display the logical current working directory.
-P      Display the physical current working directory (all symbolic links resolved).

If no options are specified, the -L option is assumed.اسلاید جلسه ی دوم : دانلود</description>
                <category>محسن جلالی</category>
                <author>محسن جلالی</author>
                <pubDate>Mon, 02 Dec 2019 00:45:07 +0330</pubDate>
            </item>
                    <item>
                <title>معرفی دوره ی هکر قانونمند و مروری بر نتورک پلاس</title>
                <link>https://virgool.io/CEHV10/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D8%AF%D9%88%D8%B1%D9%87-%DB%8C-%D9%87%DA%A9%D8%B1-%D9%82%D8%A7%D9%86%D9%88%D9%86%D9%85%D9%86%D8%AF-%D9%88-%D9%85%D8%B1%D9%88%D8%B1%DB%8C-%D8%A8%D8%B1-%D9%86%D8%AA%D9%88%D8%B1%DA%A9-%D9%BE%D9%84%D8%A7%D8%B3-kfctlbfizvr3</link>
                <description>اسلاید جلسه ی اول در این جلسه ما به معرفی دوره ی هکر قانونمند و شرکت ec-council پرداختیم و در ادامه مروری بسیار کلی بر روی مباحث نتورک پلاس انجام دادیم و در اینجا هم اسلاید های جلسه ی اول و یک جزوه ی کامل از دوره ی نتورک پلاس برای دوستان اپلود کردم که روی مباحث نتورک تسلط کافی داشته باشند.دانلوددانلود</description>
                <category>محسن جلالی</category>
                <author>محسن جلالی</author>
                <pubDate>Sun, 01 Dec 2019 22:44:37 +0330</pubDate>
            </item>
            </channel>
</rss>