设计一个对MNIST处理的CNN网络,网络结构和参数要求如下表,其中每一次的MaxPooling后都添加系数为0.25的Dropout
时间: 2023-05-29 21:06:16 浏览: 92
基于Matlab利用CNN和BP神经网络算法实现MNIST手写字体识别(源码+数据+说明文档).rar
5星 · 资源好评率100%
层。
| 层级 | 名称 | 参数 |
|------|-------------|---------------------------------------|
| 1 | 卷积层 | 输入:28 x 28 x 1,卷积核:5 x 5 x 32 |
| 2 | 激活层 | 激活函数:ReLU |
| 3 | MaxPooling层 | 池化核:2 x 2,步长:2 |
| 4 | Dropout层 | 概率:0.25 |
| 5 | 卷积层 | 输入:14 x 14 x 32,卷积核:5 x 5 x 64 |
| 6 | 激活层 | 激活函数:ReLU |
| 7 | MaxPooling层 | 池化核:2 x 2,步长:2 |
| 8 | Dropout层 | 概率:0.25 |
| 9 | Flatten层 | |
| 10 | 全连接层 | 输出维度:128 |
| 11 | 激活层 | 激活函数:ReLU |
| 12 | Dropout层 | 概率:0.5 |
| 13 | 输出层 | 输出维度:10 |
| 14 | 激活层 | 激活函数:Softmax |
代码实现如下:
```python
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Dropout, Flatten, Dense, Activation
model = Sequential()
# 卷积层1
model.add(Conv2D(32, (5, 5), input_shape=(28, 28, 1)))
model.add(Activation('relu'))
# MaxPooling层1
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(Dropout(0.25))
# 卷积层2
model.add(Conv2D(64, (5, 5)))
model.add(Activation('relu'))
# MaxPooling层2
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(Dropout(0.25))
# Flatten层
model.add(Flatten())
# 全连接层1
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.5))
# 输出层
model.add(Dense(10))
model.add(Activation('softmax'))
# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 输出模型结构
model.summary()
```
阅读全文