如果我的辍学率太高怎么办?在我的2048神经元密集层上使用什么Dropout? 很少的数据

问题描述

我对此很陌生,正在用喀拉拉邦写我的学士论文。我有一个大的CNN,其构建与vgg类似,但又有所不同,因为我具有更大的分辨率图像,而且池中的图像更多。我在顶部添加了2048个密集层。我使用什么辍学。我想辍学率很高,因为我的数据很少(请阅读下文),并且添加了许多神经元。但是,当它过高时会发生什么呢?

我之所以问是因为我的时间有限,网络训练需要3天左右的时间。如果有人以任何方式知道答案或提示,我将不胜感激。也欢迎任何其他有关更改或做什么,对您有用的建议/提议。

先谢谢! 这是我建立模型的方式:

model = Sequential()
model.add(Conv2D(64,(3,3),strides=1,activation='swish',input_shape = input_shape,trainable=True))
model.add(MaxPooling2D((2,2),name='pool0'))
model.add(Conv2D(64,name='pool1'))

model.add(Conv2D(128,trainable=True))
model.add(Conv2D(128,name='pool2'))

model.add(Conv2D(256,trainable=True))
model.add(Conv2D(256,name='pool3'))

model.add(Conv2D(512,trainable=True))
model.add(Conv2D(512,name='pool4'))

model.add(Conv2D(512,name='pool5')) 

model.add(Flatten())
model.add(Dense(2048,name='vgg_int'))
model.add(Dropout(0.65))
model.add(Dense(17,activation='softmax')) 

我也想补充一点,我所要训练的数据很少。这就是为什么我想要大辍学的原因。我每节课约有100张照片。有时甚至只有60,有时甚至只有200:


Found 1807 images belonging to 17 classes.
Found 170 images belonging to 17 classes.

我相信验证集可以超过90%,但是什么才是最好的选择,我真的不知道。如果我辍学90%,该怎么办?我目前运行60%,但模型较小,顶部只有1024个神经元:

Epoch 19/50
226/226 [==============================] - 4966s 22s/step - loss: 0.5661 - accuracy: 0.8307 - val_loss: 0.5752 - val_accuracy: 0.8412
Epoch 20/50
226/226 [==============================] - 4157s 18s/step - loss: 0.5511 - accuracy: 0.8329 - val_loss: 0.5042 - val_accuracy: 0.8647

我正在运行batch_size = 8,并且:optimizer = optimizers.Adam(learning_rate = 0.0000015)

再次感谢!

解决方法

下降用于防止模型过度拟合。我能理解为什么您要使用高辍学率,因为您的数据集非常小。但是,使用较高的辍学值对您的模型有害,并且会妨碍模型的正确学习。由于您具有验证集,因此可以使用它来了解您的模型是否过度拟合。当训练精度和验证精度之间存在较大差距时,可以停止训练模型。如果您对模型的性能不满意,建议您从Dropout 0.5开始并逐渐增加它。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...