cs231n 课程作业 Assignment 2

上一次作业基本已经讲了构建一个多层神经网络的基本知识,包括其结构,公式推导,训练方法。这一次主要关注卷积神经网络(CNN, Convolution Neural Network),要先读完课程笔记 CS231n Convolutional Neural Networks for Visual Recognition,基本就懂了。特别是那个解释卷积的动态图,非常形象。

CNN 主要多了卷积层(convolution layer)和池化层(pooling layer)的操作,还有防止过拟合的 Batch Normalization 层和 Dropout 层。后面又介绍了很多这两年经典的 CNN 架构,如 LeNet, AlexNet, GoogLeNet, VGG 以及现在最好的 残差网络(residual network)等。

Fully-connected Neural Network

前面的作业已经实现了多层的神经网络,或者叫多层感知机,这里为了后面搭建 CNN 的方便性,又重新模块化实现了一遍。即把线性变化(Affine Layers),激活层(Activation Layers),loss 层都抽象出来,像箱子一样,可以把模块一个个堆积起来。每层都有 forwardbackward 函数,负责前向传播和后向传播求导。

可以这样抽象出每层的原理就是链式求导法则,前面已经讲过了。每层只要关注 输出的梯度,就可以算出来 输入的梯度,这样一层层传递下去。很多现代的神经网络框架,如 tensorflow,pytorch 等都是这样子设计的,实际上这样节点的计算连接,最后组成了一个有向无环图,即计算图(Computation Graph)。在 TensorBoard 中还可以可视化这个计算图。

完成 FullyConnectedNets.ipynb 的要求,其中需要写完 cs231n/layers.py 中的 affine_forward, affine_backward, relu_forward, relu_backward 函数,最后几行的损失函数 svm_loss, softmax_loss 因为和之前的代码一样,所以已经帮我们实现好了。

完成 fc_net.py 中的 TwoLayerNet 类和 FullyConnectedNet 类,实现 optim.py 中的 sgd+momentum, rmsprop 和 adam,原理和公式可以参考 neural-networks-3,或者我前面的博客总结。

其实把每层都模块化以后,代码写起来还是很清晰的,麻烦点在于理清楚每层之间的关系,不过这些都是编程的逻辑和技巧,仔细一点就好了。

Batch Normalization

Batch Normalization 的出现真是逆天,加上一个简单的归一化操作(即减去均值,除以标准差),就能取得各种好的效果。具体来说,在卷积操作或者全连接层之后,但是在激活层之前加上 BN 层,会有下面的几个效果和好处,

  • 减少坏初始化的影响
  • 加快模型的收敛速度
  • 可以用大些的学习率
  • 能有效地防止过拟合

具体是怎么做的呢?是在一个 mini-batch 的数据中,算一个均值和标准差,然后做归一化,如下面公式所示,

forward

里面的参数 γ,

  • 10
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值