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

با تشکر

دسته بندی ها

0 امتیاز

سلام
1- یه شبکه دارم تو epoch اول به دقت خوبی میرسه ولی در epoch های بعدی acc به جای بهتر شدن بدتر میشه ! مگه نباید overfitبشه چرا داره فراموش میکنه !!!!
2- learning rate بعد از هر اپوچ اعمال میشه یا داخل هر اپوچ ؟
3- دیدم نظرات متفاوته در مورد batch normalization مکان درست و خوبش بعد از activation func هست یا قبلش ؟

   model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(width, height,1)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())  # this converts our 3D feature maps to 1D feature vectors
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))


sgd = keras.optimizers.rmsprop(lr=0.001) #, decay=0.1
#sgd = keras.optimizers.Adadelta(lr=0.001) #, decay=0.1


model.compile(loss='binary_crossentropy',
              optimizer=sgd,
              metrics=['accuracy'])
توسط (208 امتیاز)
ویرایش شده توسط

1 پاسخ

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

سلام.
سوال اولتون رو در تاپیک زیر توضیح دادم:

http://qa.deeplearning.ir/2958/واگرایی-شبکه-به-هنگام-آموزش

در ضمن ترجیحا از optimizer Adam استفاده کنید.
ضمنا ممکنه دقت و یا میزان خطا نوسان داشته باشه و به صورت نوسانی مثلا خطا کم بشه. یعنی ممکنه خطا در برخی استپها نسبت گام قبلی بیشتر بشه ولی شکل کلی خطا باید نزولی باشه.

2- با مقدار نرخ یادگیری در هر iteration یا به عبارتی هر update وزنها آپدیت میشوند. برای gradient descent :

w = w - learning_rate * dJ/dw 

که J تابع هزینه هست.
3- لایه batch norm رو اصولا قبل از activation function باید داشته باشید.

توسط (540 امتیاز)
انتخاب شده توسط
در مورد مکان batch اینجا رو ببینید
https://www.kaggle.com/kentaroyoshioka47/cnn-with-batchnormalization-in-keras-94#L125
تو لایه های معمولی بعد از relu قرار داده و تو لایه fully connected قبلش چرا ؟!!
توی خود مقاله اصلی که batch norm رو معرفی کرده گفته که قبل زا اعمال nonlinearity از بچ نرم استفاده کرده.
https://arxiv.org/pdf/1502.03167.pdf
قسمت 3.2 مقاله رو بخونید نوشته (We add the BN transform immediately before the
nonlinearity). البته لینکی که فرستادید رو دیدم و درست میگید. بعضا بعد از relu میذارن. ولی چیزی که مقاله اصلی ادعا کرده این بوده که قبل از ReLu باشه. من چند جا دیدم بعد از ReLU گذاشتن و ادعا کردن نتایج کمی بهتر بوده. مثلا لینک زیر:
https://github.com/fchollet/keras/issues/5465
و لینک زیر:
https://www.reddit.com/r/MachineLearning/comments/67gonq/d_batch_normalization_before_or_after_relu/
ولی واقعیت اینه که نمیشه از این لینکها نتیجه گیری کلی کرد. چون استانداردش همونی هست که مقاله گفته.
ممنون از پاسخ کاملتون
1- تو https://github.com/ducha-aiki/caffenet-benchmark/blob/master/batchnorm.md
منظور از iter تو تصاویر این لینک epoch هست یا کلا یک اپوچ رو نشون داده؟

2- نمودار خطا رو تو کراس با چه دستوری رسم میکنن ؟

3-یک جا دیدم گفته بود batch norm برای توابع relu استفاده نمیشه و برای tanh ,.. به کار میاد نظرتون؟
...