热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据分析深度学习PytorchDay6

卷积神经网络如何运用到图片分类问题感受野ReceptiveField步长Stride填充Padding参数共享shareparameter最大池化MaxPoolingCNN全过程仅


卷积神经网络如何运用到图片分类问题


感受野 Receptive Field


步长Stride


填充Padding


参数共享share parameter


最大池化MaxPooling


CNN全过程










仅个人理解学习



引言


CNN卷积神经网络最初主要是用于计算机视觉和图像处理中,比如图像分类:









在模型中交叉熵的使用:最终通过概率分布求得每个类的概率值,最大值所在类作为最终的输出









图片组成


图片一般是有RGB组成的,通常是3维:(height, width,channels)。









在喂入卷积神经网络之前需要将3维的向量拉直,变成一维向量(flatten操作):









拉直之后喂入全连接层:









问题1:如果隐藏层有1000个神经元,每个样本的输入是100*100*3,仅仅单层的总weights数是。参数增加的时候,模型表达能力更强,但是也增加了模型过拟合overfitting的风险。


在实际处理中,每个神经元(Neuron)不必和输入input的每个维度都有一个权重weight,也就是说部分维度可忽略。


图像识别:找准突出点Pattern


在一张图片中我们识别出几个特殊点(Pattern)就能够对这个进行判断,将它归属于某个类,而不需要扫描整张图片


案例中识别鸟嘴、鸟爪、鸟眼睛。一般人类也是抓住物件的重要来进行判断
















CNN概念-感受野


什么是感受野


卷积神经网络CNN中存在一个概念:感受野Receptive Field


感受野:用来表示网络内部的不同位置的神经元对原始图像的感受范围的大小。









上图解释:上面右边的一个神经元关注自己的范围(左边红色框)


感受野作用









单个神经元将自己感受野内的内容拉直成3*3*3的27维向量









image-20221027224556772


然后将27维的向量作为输入和权重W做內积,并加上偏置bias;这个隐藏层的结果作为下个隐藏层的输入。


也就是说,每个神经元只考虑值的感受野


感受野如何确定?


不同的感受野允许有重叠部分;


多个神经元Neuron共用同一个感受野;









感受野设置


下面 是一种经典的设置方式:查看全部通道channels









高和宽合起来叫做kernel_size,常见的设置是3*3


通常一个感受野不是只有一个神经元关注,通常是多个。比如常见的64个或者128个:









CNN概念-步长stride


上面介绍的单个感受野,不同的感受野之间具有什么关系?将上面的红色部分向右移动stride个单位。


下面的图形中步长是2,移动2个单位。常见值是1或者2。









在移动的过程中发现不同的感受野之间有重叠部分(交集)。


CNN概念-填充padding


在感受野不断移动的过程中,可能出现超出边界的现象,如何处理?









使用Padding填充方法。常见的填充方法:


填充现有数据的均值


全部填充0


填充边界的相同值









除了水平移动,还可以垂直移动:









这样感受野能够扫描一张图片的全部区域。


CNN概念-参数共享


在不同的图片中,鸟嘴(某个特征)可能出现在不同的位置:









即便不同位置,但肯定是有某个神经元的感受野能够扫描到。


问题来了:相同的特征在不同的位置,需要在不同的位置使用不同的神经元吗?



李宏毅老师举例子:台湾大学教务处为什么会推大型的课程?假设每个院系都需要编程(机器学习)相关的课程,那么需要在每个院系都开设这门课吗?

回答:不需要。只需要开一门大课,让不同院系的学生都可以修课。避免重复



类比图像处理,在不同感受野的神经元上可以实现共享参数:









什么是共享参数?就是两个神经元(感受野区域不同)的参数是完全相同的:









注意右侧两个神经元不同输入下的颜色


虽然两个Neuron的weight相同,但是输入不同,也就是说最终输出是不同的:
















CNN特点









Fully Connected Layer:全连接层;决定看整张图片还是部分


Receptive Field:感受野,不需要全部图片,通过部分区域能够识别分类


Parameter Sharing:参数共享;不同的Neuron之间共享相同的参数


感受野 + 参数共享 之后就构成了卷积层Convolutional Layer


CNN概念-Filter过滤器


在卷积中存在不同的Filters,大小通常是3*3*chanels的


黑白:channels=1


彩色:channels=3
















问题:每个Filter如何去图像中抓取某个特征pattern?


以Filter1为例:









依次向右和向下移动,得到不同的值:
















在图片的不同位置上什么值最大?可以通过过滤器来判断:









CNN概念-特征图Feature Map


使用Filter2的结果:









通过Filter和原图的內积得到的结果组成了特征图 Feature Map


这个Feature Map就可以看成是一张新的图片,具有64个channels(假设有64个Filters)
















Convolution由来









对比两种不同方式下的颜色:在单个感受野生成的列向量对应的权重和Fliters中的数值是一一对应。









不同的神经元能够实现参数共享share parameters,从而作用域不同的感受野区域。


参数共享的过程其实就是一个Filter不断地扫过整张图片,这个过程也就是Convolution。


笔记:


不同的神经元Neuron能共享参数


共享的参数其实就是Filter


Filter不断扫描图片的过程就是卷积


CNN概念-池化Pooling


在图片的处理,对图片的欠采样(缩放)不改变图片的本质:









池化有多种方式,最常用的Max Pooling:


1、 假设我们通过Filter先生成了一个Feature Map特征图(可以看做一个新图片)









2、将特征图进行分组


下面是以2*2为例:









3、MaxPooling选择最大的值









所以一般在做完卷积之后会再做pooling的过程,将图片变小;二者一般是交替repeat使用:









池化的缺陷:池化的作用是将图片变小,做了subsampling之后减小运算量。当图片本身就细微的时候,池化削弱了原信息,导致网络可能表现的更差。



目前有些网路架构设计是纯Convolution,舍弃了Pooling。



CNN全过程









对图片不断地进行卷积和池化


再经过Flatten:将矩阵拉直成一维向量


再将向量喂入全连接层FCL


最后加入一个softmax层,得到概率分布的结果,最后确定类别。




推荐阅读
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 人工智能推理能力与假设检验
    最近Google的Deepmind开始研究如何让AI做数学题。这个问题的提出非常有启发,逻辑推理,发现新知识的能力应该是强人工智能出现自我意识之前最需要发展的能力。深度学习目前可以 ... [详细]
  • 干货 | 携程AI推理性能的自动化优化实践
    作者简介携程度假AI研发团队致力于为携程旅游事业部提供丰富的AI技术产品,其中性能优化组为AI模型提供全方位的优化方案,提升推理性能降低成本࿰ ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了腾讯最近开源的BERT推理模型TurboTransformers,该模型在推理速度上比PyTorch快1~4倍。TurboTransformers采用了分层设计的思想,通过简化问题和加速开发,实现了快速推理能力。同时,文章还探讨了PyTorch在中间层延迟和深度神经网络中存在的问题,并提出了合并计算的解决方案。 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • cs231n Lecture 3 线性分类笔记(一)
    内容列表线性分类器简介线性评分函数阐明线性分类器损失函数多类SVMSoftmax分类器SVM和Softmax的比较基于Web的可交互线性分类器原型小结注:中文翻译 ... [详细]
  • centos6.8 下nginx1.10 安装 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • 2017亚马逊人工智能奖公布:他们的AI有什么不同?
    事实上,在我们周围,“人工智能”让一切都变得更“智能”极具讽刺意味。随着人类与机器智能之间的界限变得模糊,我们的世界正在变成一个机器 ... [详细]
  • 都会|可能会_###haohaohao###图神经网络之神器——PyTorch Geometric 上手 & 实战
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了###haohaohao###图神经网络之神器——PyTorchGeometric上手&实战相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Two Sigma人均22万英镑~
    近期原创文章: ... [详细]
author-avatar
--AppleChan--
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有