阅读笔记
Convolutional neural networks in practice
初次编辑于2020.8.17 by En
第二次修改于2020.8.19 by En
本章讲述了以及提高正确率的多个方法,有
- 利用ReLU函数代替Sigmoid或者是TanH函数
- 扩大数据集
- 加入额外的全连接层
- 利用多个神经网络决策
测试与结果
本测试 network 3,与前文所诉的network 1和network 2的目的相同,相互对比。
network 3的设置
network 3为浅层神经网络,仅含有一层隐含层,有100个隐藏神经元。训练60个epoch,LR为0.1,mini-batch size为10,无正则化。当在validation_data上的正确率最高时, 测试集的正确率为97.8%
network 3的代码
>>> import network3
>>> from network3 import Network
>>> from network3 import ConvPoolLayer, FullyConnectedLayer, SoftmaxLayer
>>> training_data, validation_data, test_data = network3.load_data_shared()
>>> mini_batch_size = 10
>>> net = Network([
FullyConnectedLayer(n_in=784, n_out=100),
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
>>> net.SGD(training_data, 60, mini_batch_size, 0.1,
validation_data, test_data)
测试结果的正确率为97.8%
与第三章所诉的network的异同点
- 相同点
1.类似的网络结构(network architecture)
2.一样的超参数(LR,epochs,mini-batch size,number of layers, number of hidden neurons)
3.浅层神经网络 - 不同点
1.第三章用到了regularization
2.第三章在输出层利用sigmoid activation以及cross-entropy cost function;本次则利用softMax和log-likelihood cost function。
一层卷积层
在网络的最开始加入一层卷积层,再插入一层max-pooling层
卷积层设置
- 5 × 5 5\times 5 5×5 local receptive fields
- stride length =1
- 20 feature maps
max-pooling层设置
- 2 × 2 2\times 2 2×2pooling windows
网络结构图
一层卷积层的代码
>>> net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2)),
FullyConnectedLayer(n_in=20*12*12, n_out=100),
SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
>>> net.SGD(training_data, 60, mini_batch_size, 0.1,
validation_data, test_data)
测试结果为98.78%
两层卷积层
网络参数设置
与上一小节的设置一致
- 5 × 5 5\times 5 5×5 local receptive field
- 2 × 2 2\times 2 2×2 pooling window
两层卷积层的代码
>>> net = Network([
ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28),
filter_shape=(20, 1, 5, 5),
poolsize=(2, 2)),
ConvPoolLayer(image_shape=(mini_batch_size, 20, 12, 12),
filter_shape=(40, 20, 5, 5)