问题:实现在MNIST数据集上,对数字的识别。
分析:
(1)输入:MNIST手写的数字图片,它是一个28*28的二维图片,为了计算,我们将其转为784维的一个向量。
(2)输出:分类器的输出是0-9的数字的概率。
(3)分类器的设计:5层的卷积神经网络。即:conv->pool->conv->pool->FC->softmax
代码如下:
"""
定义卷积神经网络分类器:
输入的二维图像,经过两个卷积-池化层,使用以softmax为激活函数的全连接层作为输出层
Args:
img -- 输入的原始图像数据
Return:
predict -- 分类的结果
"""
# Your Code Begin:
# 第一个卷积-池化层
conv_pool_1=paddle.networks.simple_img_conv_pool(
input=img,
filter_size=5,
num_filters=20,
num_channel=1,
pool_size=2,
pool_stride=2,
act=paddle.activation.Relu()
)
# 第二个卷积-池化层
conv_pool_2=paddle.networks.simple_img_conv_pool(
input=conv_pool_1,
filter_size=5,
num_filters=50,
num_channel=20,
pool_size=2,
pool_stride=2,
act=paddle.activation.Relu()
)
# 全连接层
predict = paddle.layer.fc(
input=conv_pool_2,
size=10,
act=paddle.activation.Softmax()
)
# Your Code End:
return predict
下面是完整代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
Authors: xiake(kedou1993@163.com)
Date: 2017/11/29
使用paddle框架实现逻辑数字识别案例,关键步骤如下:
1.定义分类器网络结构
2.初始化
3.配置网络结构
4.定义成本函数cost
5.定义优化器optimizer
6.定义事件处理函数
7.进行训练
8.利用训练好的模型进行预测
"""
import os
import numpy as np
from PIL import Image
import matplotlib
matplotlib.use('Agg')
import paddle.v2 as paddle
from paddle.v2.plot import Ploter
LEARNING_STEP = 0
# 绘图相关标注
TRAIN_TITLE_COST = "Train cost"
TEST_TITLE_COST = "Test cost"
TRAIN_TITLE_ERROR = "Train error rate"
TEST_TITLE_ERROR = "Test error rate"