📃
Nielsen-NNDL
  • Introduction
  • 第1章 使用神经网络识别手写数字
    • 感知机神经元
    • sigmoid神经元
    • 神经网络的架构
    • 用于识别手写数字的简单网络
    • 梯度下降学习法
      • 准备工作
      • 梯度下降法
      • 应用到神经网络
    • 实现数字分类的神经网络
      • 数据集
      • 初始化
      • 向后传递
      • 随机梯度下降
      • 总结
  • 第2章 反向传播算法的工作原理
    • 热身:一种矩阵方法快速计算神经网络的输出
    • 关于代价函数的两个假设
    • Hadamard积
    • 反向传播算法中的4个等式
      • 一个新的定义
      • 4个等式
      • 等式的意义
    • 4个等式的证明
    • 反向传播算法
    • 代码解读
    • 反向传播算法为什么这么快
  • 第3章 提升神经网络的学习方法
    • cross-entropy代价函数
      • 当前神经网络存在的问题
      • 引入cross-entropy代价函数
      • 使用cross-entropy分类手写数字
      • cross-entropy代价函数是怎么推出来的
      • cross-entropy的数学意义
      • softmaxt+loglikelihood
    • 过拟合和正则化
      • 过拟合
      • L2正则化
      • 在当前神经网络中使用L2正则化
      • 其它问题
      • L1正则化
      • dropout正则化
      • 人为扩充训练数据
    • weights初始化
    • 回到手势识别代码
    • 怎样选择超参数
      • broad策略
      • 学习率eta
      • 迭代次数epochs
      • 正则化参数lambda
      • minibatch样本数m
      • 自动化技术
    • 其它技术
      • Hessian技术
      • momentum技术
      • tanh神经元
      • RectifiedLinear神经元
  • 第5章 训练深度神经网络难以训练
    • 梯度消失问题
    • 梯度消失的原因
  • 第6章 深度学习
    • 卷积神经网络介绍
      • LocalReceptiveField
      • SharedWeights
      • pooling层
      • 组装到一起
    • 卷积神经网络的实践与改进
    • 其它深度神经网络的方法
  • 术语中英文对照
Powered by GitBook
On this page
  • 数据集说明
  • 下载数据集
  • 相关代码

Was this helpful?

  1. 第1章 使用神经网络识别手写数字
  2. 实现数字分类的神经网络

数据集

Previous实现数字分类的神经网络Next初始化

Last updated 5 years ago

Was this helpful?

数据集说明

MNIST提供两组数据,分别是training set和testing set. 作者在这一节中没有使用testing set,并且将training set进一步分成用于训练神经网络的数据和用于验证神经网络的数据。

来源

数量

名称

作用

MNIST training set

50000

训练数据集

训练神经网络

MNIST training set

10000

验证数据集

验证神经网络

MNIST testing set

10000

测试数据集

本章未使用

下载数据集

网上提供的直接通过tensorflow下载数据的方法,试了都是各种报错。

书上没有直接使用tensorflow的接口下载数据,而是先下载好数据的压缩包。代码读取压缩包并解压出数据。

相关代码

gzip: 文件压缩与解压缩 pickle: 用于python特有的类型和python的数据类型间进行转换 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

  1. 从数据集文件解压

    f = gzip.open('mnist.pkl.gz', 'rb')
  2. 读出数据

    pickle.load(f,encoding='bytes')

    数据分为三个tuple:tuple(训练数据)、tuple(验证数据)、tuple(测试数据) 每个tuple又分成2个np.array:(array(样本特征inputs), array(样本标签results)) 样本特征inputs是m个数组,每个数组代表一个样本:inputs = [x1,x2, ..., xn] 每一样本xi是包含784个元素的向量:xi = [xi1, xi2, ..., xi784] 向量中的每个元素都是[0,1]的任意实数:xij in [0,1] 向量特征outputs是包含m个元素的向量:outputs = [y1,y2,...,ym] 向量是的每个元素是[0,9]的整数数值:yi in [0,9]

  3. 将数据转换为算法需要的格式 训练数据: 转换后的训练数据为一个list。 list中包含m个元组:[tuple(),tuple(), ... ,tuple()] 每个元组中包含一个样本xiTx_i^TxiT​和它对应的标签y⃗i\vec y_iy​i​:(xiT,y⃗i)(x_i^T, \vec y_i)(xiT​,y​i​) 样本xiTx_i^TxiT​是指原始数据为行量,这里对它做了转置,成了一个列向量,或者说是784*1的矩阵:

    xiT=[[xi1][xi2]⋯[xi784]]x_i^T = \begin{bmatrix} [x_{i1}] \\ [x_{i2}] \\ \cdots \\ [x_{i784}] \end{bmatrix}xiT​=​[xi1​][xi2​]⋯[xi784​]​​

    样本标签y⃗i\vec y_iy​i​是指将yi向量化,并且也是列向量,或者说是10*1的矩阵。例如yi=5转化为:

    y⃗i=[[0][0][0][0][0][1][0][0][0][0]]\vec y_i = \begin{bmatrix} [0] \\ [0] \\ [0] \\ [0] \\ [0] \\ [1] \\ [0] \\ [0] \\ [0] \\ [0] \\ \end{bmatrix}y​i​=​[0][0][0][0][0][1][0][0][0][0]​​

    验证数据: 转换后的验证数据为一个list。 list中包含m个元组:[tuple(),tuple(), ... ,tuple()] 每个元组中包含一个样本xiTx_i^TxiT​和它对应的标签yi:(xiT,yi)(x_i^T, y_i)(xiT​,yi​) xiTx_i^TxiT​的格式与训练数据的xiTx_i^TxiT​相同。 yi则是仍然后原始数据的yi 测试数据: 在这一章中暂时不需要使用测试数据。 也可以先把测试数据准备好了。 转换的目标格式和验证数据相同。

什么是验证数据集
link