初学深度学习(二):搭建多层感知器识别手写字符集

本文介绍了作者在学习深度学习过程中,使用多层感知器模型识别手写字符时遇到的过拟合问题及其解决方案。通过增加隐藏层神经元、加入Dropout层和构建双隐藏层模型,逐步优化模型,降低泛化误差,提高了模型的泛化能力。
摘要由CSDN通过智能技术生成

初学深度学习(二):搭建多层感知器识别手写字符集

写在前面

这些博客是我的一些学习心得,如果有什么改进的地方,记得留言,另外, 我写的每一篇博客有参阅一些网上教程和书籍,书籍如下:
  • 《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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值