📃
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
  • size
  • bias
  • weights

Was this helpful?

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

初始化

Previous数据集Next向后传递

Last updated 5 years ago

Was this helpful?

使用类Network来代表神经网络。 函数def __init__(self, sizes):为神经网络的初始化。

size

Network构造函数的参数size是一个list。 list的个数代表网络的层数。 list中的每一项代表这一层的神经元个数。 例如:size = [2,3,1],说明: 输入层:2个输入神经元 输出层:1个输出神经元 中间层:共1层,有3个神经元

bias

bias代表偏移。 初始化后的b为一个list. list b中有(层数-1)项。因为输入层不需要b。中间层和输出层每层对应一项。 b中的每一项又各是一个np.array(列向量)。这些array中的元素个数各不相同,分别与该项对应的层的神经元相对应。 例如根据以上size得:

bias=[[[b11][b12][b13]],[[b21]]]bias = \begin{bmatrix} \begin{bmatrix} [b1_1] \\ [b1_2] \\ [b1_3] \end{bmatrix},[[b2_1]] \end{bmatrix}bias=​​[b11​][b12​][b13​]​​,[[b21​]]​​

假设输入层为第0层,bijbi_jbij​代表第i层上第j个神经元的b 所有的bijbi_jbij​都是均值为0方差为1的随机数

weights

weights代表权重w。 每个神经元只有1个b,却有一组w,w的个数与它的参数个数有关,因为w的初始化比b要复杂的多。 在目前学习的神经网络结构中,上一层所有神经元的输出会成为下一层所有神经元的输入。所以,某一层神经元的输入个数相同,且这一层神经的参数个数 = 上一层的神经元个数。 list weights中同样有(层数-1)项。因为输入层不需要weights。中间层和输出层每层对应一项。 weights中的每一项又各是一个二维的np.array(数组)。数组的大小为(当前层神经元个数 * 上一层神经元个数)。 例如根据以上size得:

weights=[[[w111,w112][w121,w122][w131,w132],[[w211,w212,w213]]]weights = \begin{bmatrix} \begin{bmatrix} [w1_{11}, w1_{12}] \\ [w1_{21}, w1_{22}] \\ [w1_{31}, w1_{32} \end{bmatrix},[[w2_{11}, w2_{12}, w2_{13}]] \end{bmatrix}weights=​​[w111​,w112​][w121​,w122​][w131​,w132​​​,[[w211​,w212​,w213​]]​​

假设输入层为第0层,bijkbi_{jk}bijk​代表第i-1层上的第k个神经元的输出对第i层第j个神经元的重要性。 所有的wijkwi_{jk}wijk​都是均值为0方差为1的随机数