前言
最近在b站发现了一个非常好的 计算机视觉 + pytorch 的教程,相见恨晚,能让初学者少走很多弯路。
因此决定按着up给的教程路线:图像分类→目标检测→…一步步学习用pytorch实现深度学习在cv上的应用,并做笔记整理和总结。
up主教程给出了pytorch和tensorflow两个版本的实现,我暂时只记录pytorch版本的笔记。
参考内容来自:
- up主的b站链接:https://space.bilibili.com/18161609/channel/index
- up主将代码和ppt都放在了github:https://github.com/WZMIAOMIAO/deep-learning-for-image-processing
- up主的CSDN博客:https://blog.csdn.net/qq_37541097/article/details/103482003
卷积神经网络
CNN正向传播——以LeNet举例
第一节课主要是通过LeNet网络讲解了CNN中的卷积层、池化层和全连接层的正向传播过程。(包含卷积层的神经网络都可以称为卷积神经网络),由于是基础,就不再赘述。
关于CNN基础可以参考CNN基础
关于LeNet网络可以参考LeNet详解
这里推荐一个LeNet的可视化网页,有助于理解(需翻墙)https://www.cs.ryerson.ca/~aharley/vis/conv/
补充1——反向传播中误差的计算:softmax/sigmoid
之前我自己总结过神经网络的反向传播过程,即根据误差的反向传播来更新神经网络的权值。
一般是用 交叉熵损失 (Cross Entropy Loss)来计算误差
需要注意的是,softmax的所有输出概率和为1,例如进行图像分类时,输入一张图像,是猫的概率为0.3,是狗的概率为0.6,是马的概率为0.1。
而sigmoid的输出则没有概率和为1的要求。
补充2——权重的更新
实际应用中,用优化器(optimazer)来优化梯度的求解过程,即让网络得到更快的收敛:
- SGD优化器(Stochastic Gradient Descent 随机梯度下降)
- 缺点:1. 易受样本噪声影响;2. 可能陷入局部最优解
- 改进:SGD+Momentum优化器
- Agagrad优化器(自适应学习率)
- 缺点:学习率下降的太快,可能还没收敛就停止训练
- 改进:RMSProp优化器:控制下降速度
- Adam优化器(自适应学习率)
详情可参考机器学习:各种优化器Optimizer的总结与比较
附图:几种优化器下降的可视化比较