本仓库主要使用numpy来实现深度学习中常用的网络结构,复习深度学习相关知识。
使用构造的网络模块搭建LeNet-5(结构参考Caffe实现)训练手写数字识别。
卷积模块实现时,使用标准模块测试输入输出。
卷积前向传播较为简单,只需要将权值转换为列向量,图像转换为列向量,然后按照矩阵乘法同时加上偏置在转换为图像即可。
卷积反向传播较难,首先通过误差计算权值和偏置的梯度,然后计算该误差下一传播过程中的误差,该计算中注意误差需要通过pad然后转换为列向量,和权重上下翻转后相乘即可。
在 Caffe 中如何计算卷积? 贾扬清讲解caffe中如何计算卷积。
Convolutional Neural Networks backpropagation: from intuition to derivation
本仓库实现了MaxPool2d。
Convnet: Implementing Maxpool Layer with Numpy
全连接层
Softmax层当前神经元的输出对当前的神经元的导数之和$-a_ia_j$以及$a_i(1-a_i)$。
softmax函数与交叉熵的反向梯度传导 本文介绍了softmax层的反向传播。
activation.py pytorch中激活函数设计参考。
CrossEntropy层使用了one-hot编码的target。
pytorch loss function 总结 其中介绍了pytorch中各个损失函数的关系,本仓库实现CrossEntropy包含LogSoftmax。
loss.py pytorch中相应的loss设计参考。
- Conv2d
- Pool2d
- Linear
- Softmax
- CrossEntropy
- ReLU
- LReLU
- 手把手带你用Numpy实现CNN <零> 作者也是基于这个思路讲解项目思路。
- CNN-Numpy 代码可以参考。
- 贾扬清分享_深度学习框架caffe 贾扬清关于caffe的一些分享。
- Convolutional Neural Networks (CNNs / ConvNets) cs231n中关于卷积的教程。
- Implementing convolution as a matrix multiplication 实现卷积操作。
- lenet.prototxt Caffe中关于LeNet-5的相关实现。
- Netscope Netscope一款开源的网络可视化框架(支持caffe)。
- pytorch mnist code pytorch中mnist代码参考。
- pytorch modules pytorch中深度学习模块实现列表。
- NumPyCNN 使用np实现了卷积层、ReLU和最大池化层。
- nnet 用deeppy深度学习框架实现的细节。
- brainforge,这是一个仅仅基于np实现的NN库,其中layers和optimization等,可以作为后期实现参考。