python 前向神经网络实践

实验一:前向神经网络

  • 实验环境

          Windows10 + Keras

  • 实验目标
    1. 掌握三种常用的深度学习网络结构
    2. 了解深度学习应用系统的框架
    3. 运用Keras快速搭建深度学习应用系统
    4. 熟悉常用参数调优的方法
  • 实验方法
    1. 课堂引导(5-10分钟)
    2. 课堂实践
  • 能力提升
    1. 调整超参数
    2. 调整模型结构
    3. 对比实验效果
  • 实验规划
  • Hello world
  1. 载入数据

加载Keras中的MNIST数据集

Train_images和train_labels组成了训练集。模型将从这些数据中进行学习。然后在测试集上对模型进行测试。

图像被编码为numpy数组,而标签是数字数组,取值范围为0-9.图像与标签一一对应。

  1. 数据重塑

对数据进行预处理,将其变换为网络要求的形状,并缩放在[0,1]区间,本例中将形状为(60000,28,28)类型为uint8,取值空间为[0,255]的数组变换为float32数组,形状为(60000,28*28),取值范围为0-1。

  1. 标签编码

将每个标签表示为全零向量,,只有标签索引对应的元素为1

  1. 模型建立

本例中的网络包含2个dense层,它们是密集连接的神经层,第二层是一个10路的softmax层,它将返回一个由10个概率值组成的数组。每个概率值表示当前数字图像属于10个数字类别中某一个的概率。同时设置训练容器。

  1.  模型训练

指定迭代次数为5

指定数据输入块大小为128

  1. 结果测试

训练数据上精度达到0.989

测试集精度为0.977

  1.  自主练习
  1. 改变网络的深度和宽度

综合情况如下所示

 

深度

宽度

训练集精度

测试集精度

基准

2

512

0.9891

 

0.974399983882904

 

深度不变,减小宽度

2

256

0.9856

 

0.9779000282287598

 

深度不变,增大宽度

2

1024

0.9910

 

0.980400025844574

 

减少深度

1

 

0.9222

 

0.9236000180244446

 

宽度不变,增大深度

3

512

0.9911

 

0.9790999889373779

 

深度增大,宽度减小

3

256

0.9889

 

0.9812999963760376

 

深度增大,宽度增大

3

1024

0.9912
 

 

0.9828000068664551

 

1.深度不变时,减小宽度,会使训练集精度下降,测试集上精度上升。

2.深度不变时,增大宽度,会使训练集精度和测试集精度均上升。

3.减小深度,会使测试集和训练集上精度下降。

4.宽度不变时,增大深度,训练集精度和测试集精度均上升。

总结:

增大深度和宽度,会使训练集精度上升。在一定范围内,也会使测试集精度上升,但超过范围,出现过拟合,深度增加引起的过拟合更为严重。

  1. 改变优化算法

优化算法

训练集精度

测试集精度

Sgd

0.9041
0.9126999974250793

Adagrad

0.9828
0.9764000177383423

Adadelta

0.9851
0.9789000153541565

RMSprop

0.9886
0.9800000190734863

Adam

0.9893
0.9789999723434448

Adamax

0.9834
0.9781000018119812

由此可见rmsprop算法较为合适

  • 前向深度神经网络
  1. 载入数据

载入reuters数据集,并限定为前10000个最常出现的单词。

每个样本都是一个整数列表(表示单词索引)

样本对应的标签是一个0-45范围内的整数,即话题索引编号。

  1. 尝试将索引解码为单词

  1. 实现数据向量化

  1.  标签向量化
  2. 将标签向量化有两种方法:可以将标签列表转换为整数张量,或者实验one-hot编码。One-hot编码是分类数据广泛使用的一种格式,也叫分类编码。

  1. 构建网络

网络最后一层是大小为46的Dense层,对于每个输入样本,网络都会输出一个46维向量,并且该层使用了softmax激活,网络将输出在46个不同输出类别上的概率密度

  1. 编译模型

损失函数为分类交叉熵,用于衡量两个概率分布之间的距离,通过使网络输出的概率分布和标签的真实分布距离最小化,训练网络可使输出结果尽可能接近真实标签。

  1. 留出验证集

  1. 训练模型

  1. 结果测试

测试集损失函数、测试集的正确率

对单个测试数据预测主题

  1. 自主练习

降低网络宽度对结果的影响,例如:64->4

结果如下

由此可知降低网络宽度会使测试集精度下降。

改变损失函数

损失函数

训练集精度

验证集精度

测试集精度

mean_squared_error

0.9102
0.7980
0.7738201022148132

mean_absolute_error

0.9212
0.8120
0.7858415246009827

mean_absolute_percentage_error

0.9395

 

0.8000

 

0.7747105956077576

 

mean_squared_logarithmic_error

0.9402

 

0.7870

 

0.7626892328262329

 

squared_hinge

0.9431

 

0.8080

 

0.7871772050857544

 

hinge

0.9439

 

0.8060
0.7876224517822266

 

binary_crossentropy

0.9981

 

0.9917

 

0.9910275340080261

 

categorical_crossentropy

0.9572

 

0.8050

 

0.7920747995376587

 


由此可知binary_crossentropy作为损失函数效果更好,无论在训练集、验证集还是在测试集上精度都远远领先。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值