【发布时间】:2021-01-25 01:41:50
【问题描述】:
我对此很陌生,我正在用 keras 写我的学士论文。我有这个大的 CNN,构建类似于 vgg,但有点不同,因为我有更大的分辨率图像,而且我的池更多一点。我在顶部添加了一个 2048 密集层。我使用什么 Dropout。我想要一个高辍学,因为我的数据很少(请阅读下文)并且我添加了许多神经元。但是当它太高时会发生什么?
我之所以问,是因为我的时间有限,而且网络需要大约 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, (3, 3), strides=1, activation='swish', trainable=True))
model.add(MaxPooling2D((2, 2), name='pool1'))
model.add(Conv2D(128, (3, 3), strides=1, activation='swish', trainable=True))
model.add(Conv2D(128, (3, 3), strides=1, activation='swish', trainable=True))
model.add(MaxPooling2D((2, 2),name='pool2'))
model.add(Conv2D(256, (3, 3), strides=1, activation='swish', trainable=True))
model.add(Conv2D(256, (3, 3), strides=1, activation='swish', trainable=True))
model.add(Conv2D(256, (3, 3), strides=1, activation='swish', trainable=True))
model.add(MaxPooling2D((2, 2),name='pool3'))
model.add(Conv2D(512, (3, 3), strides=1, activation='swish', trainable=True))
model.add(Conv2D(512, (3, 3), strides=1, activation='swish', trainable=True))
model.add(Conv2D(512, (3, 3), strides=1, activation='swish', trainable=True))
model.add(MaxPooling2D((2, 2),name='pool4'))
model.add(Conv2D(512, (3, 3), strides=1, activation='swish', trainable=True))
model.add(Conv2D(512, (3, 3), strides=1, activation='swish', trainable=True))
model.add(Conv2D(512, (3, 3), strides=1, activation='swish', trainable=True))
model.add(MaxPooling2D((2, 2),name='pool5'))
model.add(Flatten())
model.add(Dense(2048,activation='swish', 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)
再次,非常感谢!
【问题讨论】:
标签: machine-learning keras conv-neural-network dropout image-classification