初学深度学习(二):搭建多层感知器识别手写字符集
写在前面
这些博客是我的一些学习心得,如果有什么改进的地方,记得留言,另外, 我写的每一篇博客有参阅一些网上教程和书籍,书籍如下:
- 《Deep Learning with Keras》—— Antonio Gulli
- 《TensorFlow+Keras》深度学习人工智实践应用 林大贵著
1. 构建项目
本章需要继续上一篇初学深度学习(一):初试Keras与多层感知机的搭建所搭建的环境和部分代码。首先先创建文件夹:
dlwork) jingyudeMacBook-Pro:~ jingyuyan$ mkdir project01
创建成功后,在dlwork环境下,进入到project02目录下,打开jupyter notebook:
cd project01
jupyter notebook
2. 搭建多层感知机模型
2.1 搭建带有隐藏层的多层感知机模型
这边我们回顾和整理上一篇所搭建的多层感知机模型,并且运行代码,训练模型。
# 导包
import numpy as np
from keras.utils import np_utils
from keras.datasets import mnist
import pandas as pd
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense,Dropout,Flatten,Conv2D,MaxPooling2D,Activation
# 加载数据集
(X_train_image,y_train_label),(X_test_image,y_test_label) = mnist.load_data()
# 图像转换成向量的处理
X_Train = X_train_image.reshape(60000, 28*28).astype('float32')
X_Test = X_test_image.reshape(10000, 28*28).astype('float32')
# 图像归一化处理
X_Train_normalize = X_Train / 255
X_Test_normalize = X_Test / 255
# 标签one-hot编码处理
y_TrainOneHot = np_utils.to_categorical(y_train_label)
y_TestOneHot = np_utils.to_categorical(y_test_label)
# 设置模型参数和训练参数
# 分类的类别
CLASSES_NB = 10
# 模型输入层数量
INPUT_SHAPE = 28 * 28
# 隐藏层数量
UNITS = 256
# 验证集划分比例
VALIDATION_SPLIT = 0.2
# 训练周期,这边设置10个周期即可
EPOCH = 10
# 单批次数据量
BATCH_SIZE = 300
# 训练LOG打印形式
VERBOSE = 2
# 建立Sequential模型
model = Sequential()
# 添加一个Dense,Deense的特点是上下层的网络均连接
# 该Dense层包含输入层和隐藏层
model.add(Dense(units=UNITS,
input_dim=INPUT_SHAPE,
kernel_initializer='normal',
activation='relu'))
# 定义输出层,使用softmax将0到9的十个数字的结果通过概率的形式进行激活转换
model.add(Dense(CLASSES_NB, activation='softmax'))
# 搭建完成后输出模型摘要
model.summary()
Using TensorFlow backend.
WARNING:tensorflow:From /Users/jingyuyan/anaconda3/envs/dlwork/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
Instructions for updating:
Colocations handled automatically by placer.
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_1 (Dense) (None, 256) 200960
_________________________________________________________________
dense_2 (Dense) (None, 10) 2570
=================================================================
Total params: 203,530
Trainable params: 203,530
Non-trainable params: 0
_________________________________________________________________
搭建好模型后下一步是训练模型
# 设置训练参数
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
# 传入数据,开始训练
# verbose为表示显示打印的训练过程
train_history = model.fit(
x=X_Train_normalize,
y=y_TrainOneHot,
epochs=EPOCH,
batch_size=BATCH_SIZE,
verbose=VERBOSE,
validation_split=VALIDATION_SPLIT)
WARNING:tensorflow:From /Users/jingyuyan/anaconda3/envs/dlwork/lib/python3.6/site-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tens