概述:
一,数据集介绍:
Mnist数据集分为两部分,分别含有60000
张训练图片和10000
张测试图片,图片内容就是0-9的数字。
每一张图片包含28*28
个像素。
注:对于mnist
数据集在keras
的datasets
里面存在直接导入即可,第一次可能需要下载有点慢。
二,使用全连接层实现mnist数据集的分类
1.导入需要的模块
# 常用的科学计算库
import numpy as np
# 导入我们所用到的mnist数据集
from keras.datasets import mnist
# 导入所用到的序贯模型
from keras.models import Sequential
# 导入用到的全连接层和激活函数层
from keras.layers import Dense, Activation
# 使用优化器RMSprop
from keras.optimizers import RMSprop
# 把标签向量化
from keras.utils import np_utils
2.导入数据和数据预处理
对于深度学习网络的过程就是数据获取,数据处理,模型创建与训练,模型测试与评估,模型预测,所以先要对数据做些必要的预处理,像归一化,滤波之类的。
# x shape(60000, 28*28) y shape(10000, )
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 数据预处理
X_train = x_train.reshape(x_train.shape[0], -1) / 255 # normalize
X_test = x_test.reshape(x_test.shape[0], -1) / 255 # normalize
# 将类向量转化为类矩阵 数字 5 转换为 0 0 0 0 0 1 0 0 0 0 矩阵
y_train = np_utils.to_categorical(y_train, num_classes=10)
y_test = np_utils.to_categorical(y_test, num_classes=10)
to_categorical
就是将类别向量转换为二进制(只有0和1)的矩阵类型表示。对于多分类的任务来说是很好的,在神经网络数据矩阵向量居多。
3.神经网络的搭建,
使用keras中的一个Sequential模型,可以大致理解为"层堆叠"。一般在以后的卷积残差的一些网络中我们会使用更加灵活的函数式,
我们先实例化一个Sequential:
# 搭建神经网络模型
model = Sequential()
# 第一层Dense层 输入dim为28*28
model.add(Dense(80, input_dim=784))
# 添加激活函数tanh
model.add(Activation('tanh'))
# 第二层100个单元 激活函数为relu
model.add(Dense(100, activation='relu'))
# 输出层 10个单元 激活函数为softmax
model.add(Dense(10, activation='softmax'))
对于神经网络的搭建使用上述方法即可简单易理解对于激活函数一般分类任务的输出层使用softmax
4.确定优化器并且激活神经网络
sgd = SGD(lr=0.001) #学习率lr
# 激活神经网络
model.compile(
optimizer = sgd, # 加速神经网络
loss = 'categorical_crossentropy', # 损失函数
metrics = ['accuracy'], # 计算误差或准确率
)
5.训练和评估模型
# 使用训练集 并且训练10轮 batch_size为32
model.fit(X_train, y_train, epochs=10, batch_size=32)
# 使用测试集评估模型
loss, acc = model.evaluate(X_test, y_test)
# 可以查看网络评估结果
print('loss = ', loss)
print('acc = ', acc)
对于使用keras搭建一个简单的全连接网络来分类mnist数据集大概就这样的步骤,对于这种全连接的正确率,不会很高,对于深层的全连接也不会有很好的效果,对于图像一般采用的是卷积神经网络。
注:深度学习小白,如有错误,希望提出…