MLP用于MNIST数据集

实践:用keras训练一个MLP用于MNIST数据集

总体思路:

  1. 数据预处理
  2. 构建神经网络模型
  3. 训练模型
  4. 验证模型的泛化能力,并调节超参数

1.数据预处理

  • keras自带了MNIST数据集的例子,因此使用mnist.load_data读取数据集。
  • x代表数据,y代表标签,数据的大小为(数据量,28,28)。由于我们采用多层感知机,因此输入数据应该是1维,即28*28=784,因此首先将数据维度变换为784
  • 将数据标准化,每个像素均除以255
  • 原数据中标签为0-9,需要转化为1-hot标签。keras提供了一个转化标签的函数to_categorical,将标签转化为1-hot标签
  • 分配训练集与验证集
import keras
import numpy as np
from keras.datasets import mnist
from keras.utils import to_categorical

(x_train,y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(-1, 784)
x_train = x_train / 255
y_train = to_categorical(y_train)
x_test = x_test.reshape(-1, 784)
x_test = x_test / 255
y_test = to_categorical(y_test)

2.构建神经网络模型

Keras提供了两种建立神经网络的模型:

  • Sequential序贯式:适用于没有分支结构的神经网络 
  • Functional函数式:适用于结构复杂的模型

2.1Sequential方法构建模型

  1. 导入模块keras.models.Sequential
  2. 建立空模型 model=Sequential()
  3. 逐层加入神经网络模块。第一层必须指定输入的尺寸。
from keras.models import Sequential
from keras.layers import Dense

model = Sequential()
model.add(Dense(300, activation='sigmoid', input_shape=(784,)))
model.add(Dense(100, activation='sigmoid'))
model.add(Dense(10,activation='softmax'))

2.2 函数式方法

  1. 导入keras.models.Model模块
  2. 定义输入层并指定大小(Input层)
  3. 逐个添加层,每层之后加入(x)代表与x指代的层相连。
  4. 使用Model函数指定模型的输入和输出
from keras.models import Model
from keras.layers import Input, Dense
input_layer = Input((784,))
x = Dense(300, activation='sigmoid')(input_layer)
x = Dense(100, activation='sigmoid')(x)
x = Dense(10, activation='softmax')(x)
model = Model(input_layer, x)

3.模型的训练

在开始训练之前,要指定模型训练的损失函数和参数的更新方法,利用complie方法将其整合到模型中。

  • loss:指定损失函数。keras内置了很多损失函数,可以使用字符串形式指定。这里我们是多分类模型,因此使用交叉熵作为损失函数。
  • optimizer:指定梯度优化算法。这里我们使用随机梯度下降法sgd
  • metrics:可选参数,与训练过程无关,仅仅用于训练中观察训练情况。这里我们使用准确率
  • 使用fit方法进行训练。Fit方法需要给定数据、标签、每批数据大小、训练轮数等参数
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['acc'])
model.fit(x_train, y_train, batch_size=32, epochs=10)

 

4.模型验证

 

  • 当我们在测试集中评价我们模型的泛化能力时,使用evaluate,指定数据与真实标签,输出在测试集上的损失函数loss值和metric值(准确率)。
  • 当我们没有真实标签,仅仅用于预测时,使用predict,指定数据。
  • 可见,仅仅经过10轮训练,我们的准确率就达到了90.35%.
  • 存储模型:save(文件名)                         model.save('my_first_dnn.h5')
  • 读取模型:load_model(文件名)

 在keras框架下运行的第一个小程序完成~~~

原文地址:https://www.cnblogs.com/HuangYJ/p/11844598.html