Update 2.4-cnn.ipynb

This commit is contained in:
古代中二龙 2019-11-04 16:10:24 +08:00 committed by GitHub
parent 364b1576bf
commit 6539860362
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -129,7 +129,7 @@
"5. C5层是最后一个卷积层卷积核大小:5 * 5 卷积核种类:120\n",
"6. 最后使用全连接层将C5的120个特征进行分类最后输出0-9的概率\n",
"\n",
"下代码来自[官方教程](https://pytorch.org/tutorials/beginner/blitz/neural_networks_tutorial.html)"
"下代码来自[官方教程](https://pytorch.org/tutorials/beginner/blitz/neural_networks_tutorial.html)"
]
},
{
@ -211,7 +211,7 @@
"\n",
"3. conv - relu\n",
"\n",
"4. conv-relu\n",
"4. conv - relu\n",
"\n",
"5. conv - relu - pool\n",
"\n",
@ -289,10 +289,10 @@
"卷积层的参数减少。相比5x5、7x7和11x11的大卷积核3x3明显地减少了参数量\n",
"\n",
"通过卷积和池化层后,图像的分辨率降低为原来的一半,但是图像的特征增加一倍,这是一个十分规整的操作:\n",
"分辨率由输入的224->112->56->28->14->7,\n",
"分辨率由输入的224->112->56->28->14->7\n",
"特征从原始的RGB3个通道-> 64 ->128 -> 256 -> 512\n",
"\n",
"这为后面的网络提供了一个标准,我们依旧使用Pytorch官方实现版本来查看"
"这为后面的网络提供了一个标准我们依旧使用Pytorch官方实现版本来查看"
]
},
{
@ -366,14 +366,14 @@
"- 使用1×1卷积块NiN来减少特征数量这通常被称为“瓶颈”可以减少深层神经网络的计算负担。\n",
"- 每个池化层之前,增加 feature maps增加每一层的宽度来增多特征的组合性\n",
"\n",
"googlenet最大的特点就是包含若干个inception模块所以有时候也称作 inception net\n",
"googlenet最大的特点就是包含若干个inception模块所以有时候也称作 inception net\n",
"googlenet虽然层数要比VGG多很多但是由于inception的设计计算速度方面要快很多。\n",
"\n",
"![](googlenet.png)\n",
"\n",
"不要被这个图吓到,其实原理很简单\n",
"\n",
"Inception架构的主要思想是找出如何让已有的稠密组件接近与覆盖卷积视觉网络中的最佳局部稀疏结构。现在需要找出最优的局部构造并且重复 几次。之前的一篇文献提出一个层与层的结构,在最后一层进行相关性统计,将高相关性的聚集到一起。这些聚类构成下一层的单元,且与上一层单元连接。假设前 面层的每个单元对应于输入图像的某些区域这些单元被分为滤波器组。在接近输入层的低层中相关单元集中在某些局部区域最终得到在单个区域中的大量聚类在最后一层通过1x1的卷积覆盖。\n",
"Inception架构的主要思想是找出如何让已有的稠密组件接近与覆盖卷积视觉网络中的最佳局部稀疏结构。现在需要找出最优的局部构造并且重复几次。之前的一篇文献提出一个层与层的结构在最后一层进行相关性统计将高相关性的聚集到一起。这些聚类构成下一层的单元且与上一层单元连接。假设前面层的每个单元对应于输入图像的某些区域这些单元被分为滤波器组。在接近输入层的低层中相关单元集中在某些局部区域最终得到在单个区域中的大量聚类在最后一层通过1x1的卷积覆盖。\n",
"\n",
"上面的话听起来很生硬,其实解释起来很简单:每一模块我们都是用若干个不同的特征提取方式,例如 3x3卷积5x5卷积1x1的卷积pooling等都计算一下最后再把这些结果通过Filter Concat来进行连接找到这里面作用最大的。而网络里面包含了许多这样的模块这样不用我们人为去判断哪个特征提取方式好网络会自己解决是不是有点像AUTO ML在Pytorch中实现了InceptionA-E还有InceptionAUX 模块。\n",
"\n"
@ -818,14 +818,14 @@
"source": [
"### ResNet\n",
"2015Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun [论文](https://arxiv.org/abs/1512.03385)\n",
"Kaiming He 何凯明(音译)这个大神大家一定要记住,现在很多论文都有他参与(mask rcnn, focal loss)Jian Sun孙剑老师就不用说了现在旷世科技的首席科学家\n",
"Kaiming He 何凯明(音译)这个大神大家一定要记住,现在很多论文都有他参与(mask rcnn, focal loss)Jian Sun孙剑老师就不用说了现在旷世科技的首席科学家\n",
"刚才的googlenet已经很深了ResNet可以做到更深通过残差计算可以训练超过1000层的网络俗称跳连接\n",
"\n",
"#### 退化问题\n",
"网络层数增加但是在训练集上的准确率却饱和甚至下降了。这个不能解释为overfitting因为overfit应该表现为在训练集上表现更好才对。这个就是网络退化的问题退化问题说明了深度网络不能很简单地被很好地优化\n",
"\n",
"#### 残差网络的解决办法\n",
"深层网络的后面那些层是恒等映射那么模型就退化为一个浅层网络。那现在要解决的就是学习恒等映射函数了。让一些层去拟合一个潜在的恒等映射函数H(x) = x比较困难。如果把网络设计为H(x) = F(x) + x。我们可以转换为学习一个残差函数F(x) = H(x) - x. 只要F(x)=0就构成了一个恒等映射H(x) = x. 而且,拟合残差肯定更加容易。\n",
"深层网络的后面那些层是恒等映射那么模型就退化为一个浅层网络。那现在要解决的就是学习恒等映射函数了。让一些层去拟合一个潜在的恒等映射函数H(x) = x比较困难。如果把网络设计为H(x) = F(x) + x。我们可以转换为学习一个残差函数F(x) = H(x) - x 只要F(x)=0就构成了一个恒等映射H(x) = x. 而且,拟合残差肯定更加容易。\n",
"\n",
"以上又很不好理解,继续解释下,先看图:\n",
"![](resnet.png)\n",