我正在编写一个CNN示例,用于向大学生演示,它应该以80%以上的准确率对MNIST进行分类。我使用以下体系结构,即使我使用128的相对较大的批量,训练也需要大约10分钟才能达到精度。我在谷歌Colab上使用标准CPU,没有任何硬件加速器、AdaDelta成本函数、10个时期和分类交叉熵损失函数。
有可能提高训练时间吗?或者用给定的硬件不可能在1分钟内达到80%的准确率吗?
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 26, 26, 32) 320
max_pooling2d (MaxPooling2D (None, 13, 13, 32) 0
)
conv2d_1 (Conv2D) (None, 11, 11, 64) 18496
max_pooling2d_1 (MaxPooling (None, 5, 5, 64) 0
2D)
conv2d_2 (Conv2D) (None, 3, 3, 64) 36928
flatten (Flatten) (None, 576) 0
dense (Dense) (None, 64) 36928
dense_1 (Dense) (None, 10) 650
=================================================================
Total params: 93,322
Trainable params: 93,322
Non-trainable params: 0
_________________________________________________________________
我能够使用以下模型进行非常快速的训练:
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(28,28,1)))
convLayer01 = Activation('relu')
model.add(convLayer01)
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
convLayer02 = MaxPooling2D(pool_size=(2,2))
model.add(convLayer02)
model.add(Conv2D(64,(3, 3)))
convLayer03 = Activation('relu')
model.add(convLayer03)
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
convLayer04 = MaxPooling2D(pool_size=(2,2))
model.add(convLayer04)
model.add(GlobalAveragePooling2D())
model.add(Dense(10))
model.add(Activation('softmax'))
这种情况下的技巧是使用GlobalAveragePooling2D
而不是密集层。我得到了>在1个历元中准确率为90%。