سلام و خسته نباشید
جناب دکتر در آموزشتون بعد آموزش شبکه از دستون output = net(x_in) استفاده کردید و به ازای هر پیکسل یک بردار ۱۶ تایی به دست آوردید که از این بردار می توان تصویر خروجی را ایجاد کرد.
میشه لطف کنید بگید دقیقا این دستور در پایتون چی هست؟
در پایتون بعد اموزش شبکه یا مدل عصبی، از دستور model.predict_classes(x_in) استفاده میکنم که شماره کلاس را خروجی می دهد و برداری که بر اساس آن این شماره کلاس ها را تعیین میکند را نمیش نمیدهد.
سلام خدمت شما اساتید گرامی
طبق آموزش می پرسم و بعدا با داده های خودم درست می کنم که متوجه بشید.
جناب دکتر شما بعد آموزش شبکه، با دستور genFunction یک تابع تولید کردید که با این کار یک شبکه آموزش داده شده دارید که ضرایب آن به دست آمده اند. اکنون برای استفاده های بعدی از این شبکه، دیگر نیازی به آموزش مجدد شبکه ندارید و کافی است هر بار ورودی را که x_in است به آن معرفی کنید و تابع تولید شده با این x_in ورودی و ضرایب به دست آمده در اولین بار که شبکه را آموزش دادید و همچنین با استفاده از داده های train و target که 16 کلاس هستند و این 16 کلاس هم باز در اولین بار که شبکه را آموزش دادید، به شبکه معرفی کرده اید شبکه را اجرا کنید و خروجی بگیرید.
من هم دقیقا می خوام همین کاری که شما انجام داده اید را انجام بدهم. یعنی همان x_in را به شبکه که آموزش داده شده معرفی کنم تا با ضرایبی که به صورت ثابت از اولین آموزش شبکه به دست آمده شبکه را اجرا کنم و از آن استفاده کنم اما با این تفاوت که به جای استفاده از 16 کلاس، از چند کلاس جدید و متفاوت از 16 تا استفاده کنم.
این کلاس های جدید را چگونه به تابع تولید شده یا همان شبکه آموزش داده شده معرفی کنم که بر اساس این چند کلاس جدید و با ضرایب به دست آمده و همچنین همان x_in ورودی طبقه بندی را انجام دهم؟
با تشکر و احترام
نه جناب دکتر به این صورت که توضیح دادم منظورم هست:
تصویری که برای ورودی به شبکه به صورت سطری آماده می کنم ابعادش 1000×357 به دست می آید. و هر بار دست نخورده از آن استفاده می کنم.
تعداد 90 داده آموزشی به همراه برچسب دارم(90×357). با 60 عدد این ها (60×357) و تصویری که آماده کرده ام (1000×357)، شبکه را آموزش می دهم. یک تصویر خروجی به دست می آید که آن را ذخیره می کنم.
الان که شبکه آموزش دیده را دارم و ضرایب آن به دست آمده است، با این ضرایب و تصویری که در مرحله اول آماده کرده ام و همچنین با استفاده از 30 عدد از داده های آموزشی که قصد دارم برای تست شبکه از آن ها استفاده کنم (30×357)، شبکه را اجرا می کنم. این بار خروجی جدیدی به دست می آید که از 30 داده آموزشی و ضرایب به دست آمده از آموزش شبکه در مرحله قبلی به دست آمده است.
در نهایت با مقایسه این دو تصویر با استفاده از یک معیار، مثلا خطای RMSE، می توان به دست آورد که دقت شبکه چقدر است.
به این صورت چگونه باید انجام داد؟
با احترام
سلام
یعنی چی " خواهم تصویرم همان تصویر قبلی باشه که شبکه را به وسیله آن آموزش دادم"؟
این 30 درصد و 70 درصد داده ها یعنی چی؟ مثلا شما 100 تصویر داشتید و از 70 تا برای آموزش شبکه استفاده کردید و 30 تای آن را کنار گذاشتید؟
خیلی ممنون
من در شبکه عصبی تازه کارم خواهشا یکم بیشتر توضیح بدید. یک تابع genFunction استفاده کردید که امکان این رو میده که شبکه آموزش دیده رو داشته باشیم. اما وقتی شما استفاده میکنید ازش، همان تصویر قبلی (x_in) را به عنوان ورودی در نظر می گیرید و کاری به train و target نداشتید. اگر من هم همین کار رو انجام بدم، با این حال از 30 درصد داده که برای تست شبکه است استفاده نکردم.
از تابع predict که می فرمایید در چه بخش یا مرحله ای از کد استفده کنم و این که در این تابع، data همان تصویر است یا داده های 30 درصد؟
جواب قبلی شما را متوجه شدم، می خواهم تصویرم همان تصویر قبلی باشه که شبکه را به وسیله آن آموزش دادم و ضرایب شبکه را هم به صورت فریز شده داریم، ولی به جای 70 درصد داده ها از 30 درصد باقیمانده باید استفاده کنم.فقط لطفا طوری بهم توضیح بدید که اینجا من بتونم کد را بنویسم و درست تنظیم کنم.
با احترام
سلام
با وردی دلخواه و شبکه آموزش دیده میتوانید خروجی را predict کنید Y = predict(net,data) و با معیار دلخواه خروجی حاصل را با خروجی مورد انتظار مقایسه کنید.
موفق باشید
سلام
من طبق آموزش خروجی گرفتم. اما با داده های دیگه ای انجام دادم. از 70 درصد داده ها برای آموزش شبکه، یعنی در ایجاد train و target استفاده کردم. الان با 30 درصد باقی مانده چطوری باید شبکه را test کنم؟
با تشکر
سلام
همین جمله ای که خودتان نوشتید را کپی میکنم «در آموزش وقتی که متغیر output رو خروجی میگیرید یک ماتریس با سطر هایی به تعداد کلاس ها (16) و ستون هایی به تعداد کل پیکسل های تصویر به دست می آید.». یعنی به ازای هر پیکسل شما برداری به اندازه 16 دارید. کافی است که در هر بردار مشخص کنید که شاخص بزرگترین مقدار چیست.
موفق باشید
سلام
جناب دکتر این جمله که در مورد بردار 16 تایی توضیح دادید و گفتید که کلاس مربوط به پیکسل همان بزرگ ترین عدد میشه خیلی عالی و مفید بود. سوال قبلی که پرسیدم را نادیده بگیرید. حد آستانه گذاری این بار جواب داد و خروجی دقیقا همان چیزی است که می خواستم.
من دیتا هایی که دارم به کلی، یعنی هم تصویر و هم برچسب ها خیلی متفاوت با داده های این آموزش هست و به همین دلیل بود که تنظیم و اجرای کد برام دشوار بود.
اما آموزشتون خیلی عالیه، امید وارم خیلی ها که هنوز تا حالا تهیه نکردند سریع تر تهیه کنند.
با احترام
خیلی ممنون از این که هر بار وقت گذاشتید و پاسخ دادید.
این بردار را که میفرمایید اگه پیدا کنم بسیار عالی خواهد بود. این بردار با چه نامی در خروجی ها وجود دارد و یا چگونه می توان به آن دسترسی پیدا کرد؟
با احترام
سلام
شما نباید آستانه گذاری کنید. شما به ازای هر پیکسل یک بردار ۱۶ تایی دارید و کلاس مربوط به این پیکسل متناظر با بزرگترین مقدار در این بردار است. برای مرحله آخر میتوانید کلاس متناظر با object مدنظر را به عنوان خروجی در نظر بگیرید.
سلام جناب دکتر
احتمالا من سوال را پیچیده پرسیدم.
در آموزش وقتی که متغیر output رو خروجی میگیرید یک ماتریس با سطر هایی به تعداد کلاس ها (16) و ستون هایی به تعداد کل پیکسل های تصویر به دست می آید.
نویسنده مقالاتی که با شبکه عصبی کار کردن میگن که خروجی صفر و یک بدست می آید. که صفر نشان دهنده نبود عارضه و یک نشان دهنده وجود عارضه است.
اما خروجی ما درجه خاکستری داره به تعداد کلاس ها.
من موقعیت مکانی پیکسل تارگت را می دانم. اگر دو پیکسل تارگت که یکی DN قوی و یکی دیگر با DN ضعیف باشد را در نظر بگیرم و در هر سطر از خروجی output حد استانه گذاری کنم که هر مقداری از درایه های این متغیر مقدارش بین این دو DN بود رو با رنگ سفید نماش بده و مابقی را رنگ سیاه بهش بدم قاعدتا باید تصویری نمایش بده که تارگت هایی که به درستی شناسایی شدند سفید و مابقی سیاه باشند.
این کار را در روش های target detection مانند ACE و CEM و MF و... انجام دادم درسته اما در این پروژه خروجی اشتباه هست.
کد را با دقت نوشتم و دقیق مثل مقاله جلو رفتم، یا از output به آن صورت نمی توان استفاده کرد یا احتمال دارد که در قسمت آماده سازی داده برای train و target نکته ای باشد که باید کد را شما ببینید تا تشخیص بدید که مشکل از کجا هست.
اگر وقت دارید با هم جلسه ای داشته باشیم تا بهتر بررسی کنیم و هرطور که شما فرمودید من در خدمتم.
با تشکر
سلام
من دقیقا متوجه مشکل شما نشدم ولی سعی میکنم با توجه به توضیحات شما راهنمایی کنم.
سوال آخرتان در مورد میزان مشابهت میتوانید از طبقه خروجی قبل از Softmax یک نسبت به عنوان عدم قطعیت محاسبه کنید و مواردی که عدم قطعیت بالایی دارند را در نظر نگیرید. البته اگر شما 3 کلاس دارید و یک background یعنی اینکه شما حداقل 4 کلاس دارید و میتوانید 4 کلاس را آموزش دهید. اگر در کلاس background تفاوت طیفی زیاد است، مثلا با خوشه بندی یک ساختار اولیه N خوشه ای در Background ایجاد کنید و با این پیش پردازش کلاس های شما 3+N میشود که شامل 3 کلاس اصلی و N کلاس Background است که این N کلاس در واقع برای شما اهمیت ندارند و در حکم یک کلاس هستند.
موفق باشید
سلام و خسته نباشید جناب دکتر
من در رابطه با موضوع target detection با تطابق امضا های طیفی با استفاده از شبکه عصبی کار می کنم.
مشکل قبلی حل شد و با داده های خودم انجام دادم.
زمانی که خروجی تولید میشه، در نهایت یک تصویر رو نمایش میدیم. که تصویر به تعداد کلاس هایی که موجوده طبقه بندی میشه و یک رنگ از درجات خاکستری به هر کلاس داده میشه. که در این آموزش تعداد کلاس ها ۱۶ هستند و هر کلاس یا برچسب هم نشان دهنده یک نوع عاضه متفاوت هستند. یعنی ۱۶ عارضه متفاوت.
اما من در داده های خودم ۳ کلاس یا برچسب دارم و هر ۳ برچسب هم نمایانگر فقط یک نوع عارضه هستند. در تصویر نهایی که نمایش می دهیم، طوری هست که هر پیکسل از تصویر حتما یکی از شماره کلاس ها به آن اختصاص داده شده است. اما در واقعیت تعداد کمی از پیکسل های تصویر من به عنوان تارگت مورد نظر هستند و نباید کل پیکسل های تصویر حتما در یک کلاس قرار بگیرند.
چه راه کاری هست که مثلا با حد آستانه گذاری یا هر روش دیگری در شبکه تعیین کرد که پیکسل هایی که به طور مثال تا ۶۰ درصد شباهت داشتند را وارد کلاس کند و در غیر این صورت طبقه بندی نشوند و به نحوی از پیکسل های طبقه بندی شده متفاوت باشند.
با احترام
Mohammad Kakooei –
سلام احتمالا در لایه قبلی قرار دارد! البته بستگی دارد به اینکه کلاس های شما به شکل one hat تعریف شده باشد یا categorical.
محمد صالحی –
سلام و خسته نباشید جناب دکتر در آموزشتون بعد آموزش شبکه از دستون output = net(x_in) استفاده کردید و به ازای هر پیکسل یک بردار ۱۶ تایی به دست آوردید که از این بردار می توان تصویر خروجی را ایجاد کرد. میشه لطف کنید بگید دقیقا این دستور در پایتون چی هست؟ در پایتون بعد اموزش شبکه یا مدل عصبی، از دستور model.predict_classes(x_in) استفاده میکنم که شماره کلاس را خروجی می دهد و برداری که بر اساس آن این شماره کلاس ها را تعیین میکند را نمیش نمیدهد.
Mohammad Kakooei –
سلام زمانی که شما شبکه را آموزش دادید، نمیتوانید تعداد کلاس های خروجی آن را تغییر دهید. مگر آنکه مجددا شبکه را آموزش دهید.
zahramahbobi5173@gmail.com –
سلام خدمت شما اساتید گرامی طبق آموزش می پرسم و بعدا با داده های خودم درست می کنم که متوجه بشید. جناب دکتر شما بعد آموزش شبکه، با دستور genFunction یک تابع تولید کردید که با این کار یک شبکه آموزش داده شده دارید که ضرایب آن به دست آمده اند. اکنون برای استفاده های بعدی از این شبکه، دیگر نیازی به آموزش مجدد شبکه ندارید و کافی است هر بار ورودی را که x_in است به آن معرفی کنید و تابع تولید شده با این x_in ورودی و ضرایب به دست آمده در اولین بار که شبکه را آموزش دادید و همچنین با استفاده از داده های train و target که 16 کلاس هستند و این 16 کلاس هم باز در اولین بار که شبکه را آموزش دادید، به شبکه معرفی کرده اید شبکه را اجرا کنید و خروجی بگیرید. من هم دقیقا می خوام همین کاری که شما انجام داده اید را انجام بدهم. یعنی همان x_in را به شبکه که آموزش داده شده معرفی کنم تا با ضرایبی که به صورت ثابت از اولین آموزش شبکه به دست آمده شبکه را اجرا کنم و از آن استفاده کنم اما با این تفاوت که به جای استفاده از 16 کلاس، از چند کلاس جدید و متفاوت از 16 تا استفاده کنم. این کلاس های جدید را چگونه به تابع تولید شده یا همان شبکه آموزش داده شده معرفی کنم که بر اساس این چند کلاس جدید و با ضرایب به دست آمده و همچنین همان x_in ورودی طبقه بندی را انجام دهم؟ با تشکر و احترام
احمدنجفی –
با عرض سلام دکتر گفتن اصلا متوجه سوالتون نمیشن. یک طور دیگه ای بنویسید که خواننده کاملا متوجه بشه ممنون از شما
zahramahbobi5173@gmail.com –
سلام و ادب جناب دکتر لطفا اگر هستید من منتظر پاسخ شما هستم. با تشکر
zahramahbobi5173@gmail.com –
نه جناب دکتر به این صورت که توضیح دادم منظورم هست: تصویری که برای ورودی به شبکه به صورت سطری آماده می کنم ابعادش 1000×357 به دست می آید. و هر بار دست نخورده از آن استفاده می کنم. تعداد 90 داده آموزشی به همراه برچسب دارم(90×357). با 60 عدد این ها (60×357) و تصویری که آماده کرده ام (1000×357)، شبکه را آموزش می دهم. یک تصویر خروجی به دست می آید که آن را ذخیره می کنم. الان که شبکه آموزش دیده را دارم و ضرایب آن به دست آمده است، با این ضرایب و تصویری که در مرحله اول آماده کرده ام و همچنین با استفاده از 30 عدد از داده های آموزشی که قصد دارم برای تست شبکه از آن ها استفاده کنم (30×357)، شبکه را اجرا می کنم. این بار خروجی جدیدی به دست می آید که از 30 داده آموزشی و ضرایب به دست آمده از آموزش شبکه در مرحله قبلی به دست آمده است. در نهایت با مقایسه این دو تصویر با استفاده از یک معیار، مثلا خطای RMSE، می توان به دست آورد که دقت شبکه چقدر است. به این صورت چگونه باید انجام داد؟ با احترام
Mohammad Kakooei –
سلام یعنی چی " خواهم تصویرم همان تصویر قبلی باشه که شبکه را به وسیله آن آموزش دادم"؟ این 30 درصد و 70 درصد داده ها یعنی چی؟ مثلا شما 100 تصویر داشتید و از 70 تا برای آموزش شبکه استفاده کردید و 30 تای آن را کنار گذاشتید؟
zahramahbobi5173@gmail.com –
خیلی ممنون من در شبکه عصبی تازه کارم خواهشا یکم بیشتر توضیح بدید. یک تابع genFunction استفاده کردید که امکان این رو میده که شبکه آموزش دیده رو داشته باشیم. اما وقتی شما استفاده میکنید ازش، همان تصویر قبلی (x_in) را به عنوان ورودی در نظر می گیرید و کاری به train و target نداشتید. اگر من هم همین کار رو انجام بدم، با این حال از 30 درصد داده که برای تست شبکه است استفاده نکردم. از تابع predict که می فرمایید در چه بخش یا مرحله ای از کد استفده کنم و این که در این تابع، data همان تصویر است یا داده های 30 درصد؟ جواب قبلی شما را متوجه شدم، می خواهم تصویرم همان تصویر قبلی باشه که شبکه را به وسیله آن آموزش دادم و ضرایب شبکه را هم به صورت فریز شده داریم، ولی به جای 70 درصد داده ها از 30 درصد باقیمانده باید استفاده کنم.فقط لطفا طوری بهم توضیح بدید که اینجا من بتونم کد را بنویسم و درست تنظیم کنم. با احترام
Mohammad Kakooei –
سلام با وردی دلخواه و شبکه آموزش دیده میتوانید خروجی را predict کنید Y = predict(net,data) و با معیار دلخواه خروجی حاصل را با خروجی مورد انتظار مقایسه کنید. موفق باشید
zahramahbobi5173@gmail.com –
سلام من طبق آموزش خروجی گرفتم. اما با داده های دیگه ای انجام دادم. از 70 درصد داده ها برای آموزش شبکه، یعنی در ایجاد train و target استفاده کردم. الان با 30 درصد باقی مانده چطوری باید شبکه را test کنم؟ با تشکر
Mohammad Kakooei –
سلام همین جمله ای که خودتان نوشتید را کپی میکنم «در آموزش وقتی که متغیر output رو خروجی میگیرید یک ماتریس با سطر هایی به تعداد کلاس ها (16) و ستون هایی به تعداد کل پیکسل های تصویر به دست می آید.». یعنی به ازای هر پیکسل شما برداری به اندازه 16 دارید. کافی است که در هر بردار مشخص کنید که شاخص بزرگترین مقدار چیست. موفق باشید
محمد صالحی –
سلام جناب دکتر این جمله که در مورد بردار 16 تایی توضیح دادید و گفتید که کلاس مربوط به پیکسل همان بزرگ ترین عدد میشه خیلی عالی و مفید بود. سوال قبلی که پرسیدم را نادیده بگیرید. حد آستانه گذاری این بار جواب داد و خروجی دقیقا همان چیزی است که می خواستم. من دیتا هایی که دارم به کلی، یعنی هم تصویر و هم برچسب ها خیلی متفاوت با داده های این آموزش هست و به همین دلیل بود که تنظیم و اجرای کد برام دشوار بود. اما آموزشتون خیلی عالیه، امید وارم خیلی ها که هنوز تا حالا تهیه نکردند سریع تر تهیه کنند. با احترام
محمد صالحی –
خیلی ممنون از این که هر بار وقت گذاشتید و پاسخ دادید. این بردار را که میفرمایید اگه پیدا کنم بسیار عالی خواهد بود. این بردار با چه نامی در خروجی ها وجود دارد و یا چگونه می توان به آن دسترسی پیدا کرد؟ با احترام
Mohammad Kakooei –
سلام شما نباید آستانه گذاری کنید. شما به ازای هر پیکسل یک بردار ۱۶ تایی دارید و کلاس مربوط به این پیکسل متناظر با بزرگترین مقدار در این بردار است. برای مرحله آخر میتوانید کلاس متناظر با object مدنظر را به عنوان خروجی در نظر بگیرید.
محمد صالحی –
سلام جناب دکتر احتمالا من سوال را پیچیده پرسیدم. در آموزش وقتی که متغیر output رو خروجی میگیرید یک ماتریس با سطر هایی به تعداد کلاس ها (16) و ستون هایی به تعداد کل پیکسل های تصویر به دست می آید. نویسنده مقالاتی که با شبکه عصبی کار کردن میگن که خروجی صفر و یک بدست می آید. که صفر نشان دهنده نبود عارضه و یک نشان دهنده وجود عارضه است. اما خروجی ما درجه خاکستری داره به تعداد کلاس ها. من موقعیت مکانی پیکسل تارگت را می دانم. اگر دو پیکسل تارگت که یکی DN قوی و یکی دیگر با DN ضعیف باشد را در نظر بگیرم و در هر سطر از خروجی output حد استانه گذاری کنم که هر مقداری از درایه های این متغیر مقدارش بین این دو DN بود رو با رنگ سفید نماش بده و مابقی را رنگ سیاه بهش بدم قاعدتا باید تصویری نمایش بده که تارگت هایی که به درستی شناسایی شدند سفید و مابقی سیاه باشند. این کار را در روش های target detection مانند ACE و CEM و MF و... انجام دادم درسته اما در این پروژه خروجی اشتباه هست. کد را با دقت نوشتم و دقیق مثل مقاله جلو رفتم، یا از output به آن صورت نمی توان استفاده کرد یا احتمال دارد که در قسمت آماده سازی داده برای train و target نکته ای باشد که باید کد را شما ببینید تا تشخیص بدید که مشکل از کجا هست. اگر وقت دارید با هم جلسه ای داشته باشیم تا بهتر بررسی کنیم و هرطور که شما فرمودید من در خدمتم. با تشکر
Mohammad Kakooei –
سلام من دقیقا متوجه مشکل شما نشدم ولی سعی میکنم با توجه به توضیحات شما راهنمایی کنم. سوال آخرتان در مورد میزان مشابهت میتوانید از طبقه خروجی قبل از Softmax یک نسبت به عنوان عدم قطعیت محاسبه کنید و مواردی که عدم قطعیت بالایی دارند را در نظر نگیرید. البته اگر شما 3 کلاس دارید و یک background یعنی اینکه شما حداقل 4 کلاس دارید و میتوانید 4 کلاس را آموزش دهید. اگر در کلاس background تفاوت طیفی زیاد است، مثلا با خوشه بندی یک ساختار اولیه N خوشه ای در Background ایجاد کنید و با این پیش پردازش کلاس های شما 3+N میشود که شامل 3 کلاس اصلی و N کلاس Background است که این N کلاس در واقع برای شما اهمیت ندارند و در حکم یک کلاس هستند. موفق باشید
محمد صالحی –
سلام و خسته نباشید جناب دکتر من در رابطه با موضوع target detection با تطابق امضا های طیفی با استفاده از شبکه عصبی کار می کنم. مشکل قبلی حل شد و با داده های خودم انجام دادم. زمانی که خروجی تولید میشه، در نهایت یک تصویر رو نمایش میدیم. که تصویر به تعداد کلاس هایی که موجوده طبقه بندی میشه و یک رنگ از درجات خاکستری به هر کلاس داده میشه. که در این آموزش تعداد کلاس ها ۱۶ هستند و هر کلاس یا برچسب هم نشان دهنده یک نوع عاضه متفاوت هستند. یعنی ۱۶ عارضه متفاوت. اما من در داده های خودم ۳ کلاس یا برچسب دارم و هر ۳ برچسب هم نمایانگر فقط یک نوع عارضه هستند. در تصویر نهایی که نمایش می دهیم، طوری هست که هر پیکسل از تصویر حتما یکی از شماره کلاس ها به آن اختصاص داده شده است. اما در واقعیت تعداد کمی از پیکسل های تصویر من به عنوان تارگت مورد نظر هستند و نباید کل پیکسل های تصویر حتما در یک کلاس قرار بگیرند. چه راه کاری هست که مثلا با حد آستانه گذاری یا هر روش دیگری در شبکه تعیین کرد که پیکسل هایی که به طور مثال تا ۶۰ درصد شباهت داشتند را وارد کلاس کند و در غیر این صورت طبقه بندی نشوند و به نحوی از پیکسل های طبقه بندی شده متفاوت باشند. با احترام
Mohammad Kakooei –
سلام تمامی داده های استفاده در آموزش در فایل دانلودی موجود است. موفق باشید
فرهاد –
سلام ... تصاویر ماهواره ای و ground troth استفاده شده در این آموزش در فایل دانلودی موجود است ؟