به بخش پرسش و پاسخ یادگیری عمیق خوش آمدید,
این نسخه آزمایشی سایت است.
لطفا به نکات زیر توجه کنید:
  • برای ارتباط با مدیران میتوانید از صفحه مدیران اقدام کنید.
  • سوال و جواب ها باید به زبان فارسی باشند. استفاده از زبان انگلیسی یا فینگلیش برای پاسخ دادن مجاز نیست.
  • لطفا بعد از پرسش سوال لینک سوال خود را در گرو تلگرام (Iran Deep Learning Group) معرفی کنید تا سریعتر به جواب برسید. برای دسترسی به آخرین لینک از منابع یادگیری استفاده کنید
  • لطفا بجای عکس از متن استفاده کنید. اگر متون طولانی هستند از سایت pastebin.com برای اپلود استفاده کرده و لینک حاصل را در سوال خود قرار دهید. برای قرار دادن تصویر ، از بخش ارسال تصویر ادیتور سایت استفاده کنید.
  • بعد از دریافت پاسخ، بهترین پاسخ را از طریق کلیک بر روی علامت تیک انتخاب کنید
  • اگر با خطا و یا مشکلی مواجه شدید از بخش تماس با ما در انتهای صفحه و یا ایمیل Coderx7@gmail.com موضوع را اطلاع دهید.

با تشکر

+1 امتیاز

در اینجا (حتما این لینک رو بخونید در این لینک مسئله شرح داده شده است) یک برنامه بسیار بد نوشتم که با راهنمایی یک از دوستان تبدیل به برنامه‌ی زیر شد. اما دقت مدل در طول اجرا دارای نوسانات زیادی بود و حتی در چند مورد بسیار کم شد.
چه راهکارهایی وجود داره برای اینکه نوسانات دقت مدل در مسیر رسیدن به جواب مطلوب کمتر بشه

model = Sequential()

model.add(Conv2D(filters=4,kernel_size=(5,5),strides=(3,3),input_shape = (100, 100, 1)))
model.add(Activation('relu'))
model.add(MaxPooling2D(2,1))
model.add(Dropout(0.25))

model.add(Conv2D(filters=8,kernel_size=(5,5),strides=(3,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(2,1))
model.add(Dropout(0.25))

model.add(Conv2D(filters=16,kernel_size=(3,3),strides=(1,1)))
model.add(Activation('relu'))
model.add(MaxPooling2D(2,1))
model.add(Dropout(0.25))

model.add(Flatten())

model.add(Dense(20))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

model.fit(X_train, y_train, batch_size=64, epochs=500, verbose=1, validation_data=(X_test, y_test))

سوال شده توسط (138 امتیاز)

2 پاسخ

+2 امتیاز
 
بهترین پاسخ

سلام
در بحث کلاسبندی هدف طراحی یک مدل با دقت زیاد بر روی دیتای تست (یعنی دیتایی که در حین آموزش ندیده) هستش. بعبارت دیگه مدلی که تعمیم پذیری خوبی داره.
در حین آموزش معمولا در epoch‌ های مختلف شبکه را ذخیره میکنند. و در نهایت از بین مدل های ذخیره شده مدل برگزیده شده مدلی هست که دارای دقت بیشتر بر روی دیتای تست باشد. و اینکه در حین آموزش دقت مدل نوسانات داشته اهمیتی نداره.
مگر اینکه شما هدف دیگه ای رو دنبال می کنید!! ؟

پاسخ داده شده توسط (830 امتیاز)
انتخاب شده توسط
+1 امتیاز

سلام
همونطور که آقای نصیری خوب اشاره کردن اکثر مدلها دارای نوسان هستن اما قرار نیست این نوسانات خیلی زیاد باشه. (البته نگفتید نوسان شما چقدره تا بگیم طبیعی هست یا خیر)
وجود نوسان دلایل مختلفی داره یکی از بارزترین اونها مقداردهی اولیه اس. اگه شما از یک seed یکسان برای شبکه استفاده کنید باید هر بار یک رفتار مشابه رو ببینید.
وقتی نوسان زیاد نباشه (معمولا هر شبکه رو چند بار ترین میکنن و بعد بهترین نتیجه رو استفاده میکنن این بین تفاوت ها زیاد نباید باشه چون شبکه تغییری نکرده و این تفاوتها نشات گرفته از مقداردهی اولیه است) هموطنور که جناب نصیری اشاره کردن رفتارمیشه.
اما وقتی نوسان زیاد باشه یعنی یک مشکلی هست. اولین مشکل نرخ یادگیری و یا مومنتوم بالاتر هست که میتونه باعث این مساله بشه. مساله دوم اگر معماری عمیق باشه تعداد لایه ها و عدم استفاده از بچ نرمالیزیشن هست و هر مقداردهی اولیه بشدت تاثیرگذار هست روی کارایی شبکه .
حالا اینها مواردی بود در مورد زمان تست. در زمان ترینینگ شما دقت رو به ازای بچ ها معمولا دریافت میکنید و مشاهده نوسانات زیاد خصوصا در ابتدای ترینینگ زمانی که نرخ یادگیری بالاس اصلا عجیب و یا نگران کننده نیست و رفته رفته میبینید با کاهش نرخ یادگیری و همینطور گذشت تکرار های بیشتر این نوسانات خیلی کاهش پیدا میکنه.
پس برای رفع مشکل اول این موارد رو مورد بررسی قرار بدید.
ضمنا در شبکه هایی که تعداد پارامتر کمی دارید میتونید از دراپ اوت استفاده نکنید و یا نرخش رو خیلی کم کنید (بسته به میزان پارامتری که دارید)

پاسخ داده شده توسط (4.2k امتیاز)
این میزان نوسان طبیعی هست
در پاسخ به بچ نرمالیزیشن اشاره کردید درصورتی که تو کارهای جدید کمتر ازش استفاده میشه، دلیلش چیه؟ و در چه زمان‌هایی بهتره استفاده بشه
سلام. تمام کارهای اخیر همه از بچ نرمالیزیشن استفاده میکنن. کدوم معماری رو دیدید که از بچ نرمالیزیشن استفاده نمیکنه؟ وجود بچ نرمالیزیشن بطور ویژه برای ترین بهتر معماری های عمیق یکی از ملزوماته چون تا حد امکان covariate shift رو کاهش میده که این هم به نوبه خودش باعث کاهش قابل توجه حساسیت نسبت به مقداردهی های اولیه و همینطور تاثیرات پارامترها بر روی توزیع ورودی لایه های داخلی میشه.
...