手写数字识别
数据集和部分代码来自:https://aistudio.baidu.com/aistudio/projectDetail/101813
我们直接进入我们的实现部分;
我们先来本次任务的流程,大部分神经网络也是这个流程:
接下来我们直接进入数据的处理部分:
#导入需要的包
import numpy as np
import paddle as paddle
import paddle.fluid as fluid
from PIL import Image
import matplotlib.pyplot as plt
import os #导入必要的包 用飞桨网络作为框架
BUF_SIZE=512
BATCH_SIZE=128
#用于训练的数据提供器,每次从缓存中随机读取批次大小的数据
train_reader = paddle.batch(
paddle.reader.shuffle(paddle.dataset.mnist.train(),
buf_size=BUF_SIZE),
batch_size=BATCH_SIZE)
#用于训练的数据提供器,每次从缓存中随机读取批次大小的数据
test_reader = paddle.batch(
paddle.reader.shuffle(paddle.dataset.mnist.test(),
buf_size=BUF_SIZE),
batch_size=BATCH_SIZE)
#用于打印,查看mnist数据
train_data=paddle.dataset.mnist.train();
sampledata=next(train_data()) #next用法:返回迭代器的下一个项目
print(sampledata)
train_reader和test_reader
paddle.dataset.mnist.train()和test()分别用于获取mnist训练集和测试集
paddle.reader.shuffle()表示每次缓存BUF_SIZE个数据项,并进行打乱
paddle.batch()表示每BATCH_SIZE组成一个batch
接下来就到了配置网络的部分,本次网络使用的是DNN全连接网络,把每一个神经元都连接在一起,全部连接,所以命名为:全连接网络:
# 定义多层感知器
def multilayer_perceptron(input):
# 第一个全连接层,激活函数为ReLU
hidden1 = fluid.layers.fc(input=input, size=100, act='relu')
# 第二个全连接层,激活函数为ReLU
hidden2 = fluid.layers.fc(input=hidden1, size=100, act='relu')
# 以softmax为激活函数的全连接输出层,输出层的大小必须为数字的个数10
prediction = fluid.layers.fc(input=hidden2, size=10, act='softmax')
return prediction
以上我们就定义完了一个简单的全连接网络,两个隐层都是100层,最后全连接输出层为10层,聪明的朋友应该已经想到为什么是十层了,手写数字识别,识别的数字是0-9,固然为10层。
激活函数:<