【cs231n】Assignment2总结

Assignment2的两个要点:

  • 全连接神经网络的系统构建、深度学习优化方法、正则化、归一化等等
内容 作业代码
全连接神经网络的构建 cs231n/classifiers/fc_net.py
相关层的前向与反向传播(affine\relu\bn\ln\dropout) cs231n/layers.py
相关层的组合(affine\relu) cs231n/layer_utils.py
神经网络的参数更新方法(优化器) cs231n/optim.py
  • 卷积神经网络的基本概念、各个层的前向与反向传播
内容 作业代码
卷积层、池化层的前向反向传播 cs231n/layers.py
相关层的组合(conv\relu\pool) cs231n/layer_utils.py
卷积神经网络的构建 cs231n/classifiers/cnn.py

全连接网络

在Assignment1中实现了两层的全连接,这里主要是对其进行模块化和规范化,其主要思想是求导的链式法则,即将每一层的forward和 backward抽出来形成一个黑箱,在计算时只要传入输入及相关参数就可以实现正向和反向计算。

首先要完成cs231n/layers.py里的affine relu batchnorm layernorm dropout相关函数,每个函数都包含了forward和 backward两个。难点在于batchnorm layernorm两个归一化层,在【cs231n】Batchnorm及其反向传播中进行了详细推导。batchnorm_backward是根据链式求导法则一步步计算的,batchnorm_backward_alt则是根据最后结果直接进行计算,两者所得结果相同。

cs231n/layer_utils.py对两种层的常用组合进行了定义,以便后面进一步调用。比如affine_relu_forward affine_relu_backward

cs231n/optim.py中定义了sgd sgd_momentum rmsprop adam四种参数更新方法,具体公式见【cs231n】深度学习优化方法。

然后就是完成cs231n/classifiers/fc_net.py中的两个类TwoLayerNet FullyConnectedNet,并在FullyConnectedNets.ipynb中进行实验。全连接网络的作业大致如此。

卷积神经网络

首先要实现卷积网络中两个常用层:卷积层和池化层。cs231n/layers.py中conv_forward_naive conv_backward_naive max_pool_forward_naive max_pool_backward_naive。其正向传播与反向传播的计算方法在【cs231n】卷积神经网络及反向传播,因为卷积涉及到卷积核在图像上的滑动,所以其求导过程略显复杂,这里我从一个实例推广到一般化,就会很容易理解其过程。

另外cs231n/layers.py中定义了卷积中的bn层spatial_batchnorm_forward,由于卷积的输出为四维,所以这里将通道数C作为一维,计算batchsize\H\W的均值和方差,调用之前定义的bn层接口,即可完成。

最后完成cs231n/classifiers/cnn.py,并在ConvolutionalNetworks.ipynb中进行实验。

你可能感兴趣的:(cs231n)