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

cnn卷积神经网络代码(lenet5卷积神经网络)

了解一定的技术原理,对产品经理而言是有益处的。本文讲述的图像处理的基本思路,希望大家能够对当前图像处理技术有一定了解。现在有个概念叫泛产品经理,这个概念本身是好的,核心说的是产品思


了解一定的技术原理对产品经理很有好处。 希望大家对现在的图像处理技术有一定的了解,这是本文论述的图像处理的基本思路。




现在有泛产品经理这个概念。 这个概念本身很好。 核心是产品思维,但我认为在工作上有误解。 产品经理在工作中必须强调自己的核心价值和职业壁垒,如果不能构筑良好的职业壁垒,就会面临中年危机带来的挑战。


人工智能的技术内容是形成职业壁垒的有力武器,并不要求产品经理能够自己编写代码开发产品。 此外,了解技术原理后,能够迅速高效地将业务转化为可实施的产品问题,对人工智能相关产品来说更为重要。 了解一定的技术原理对产品经理很有好处。 希望大家对现在的图像处理技术有一定的了解,这是本文论述的图像处理的基本思路。


卷积神经网络(Convolutional Neural Network,CNN )是前馈神经网络,是当前图像处理的主流技术。 说到CNN卷积网络,2012年慷慨的天空Krizhevsky凭借它们获得了当年的ImageNet大会(斯坦福大学李飞发起的全球人工智能大会),慷慨的天空Net获得了图像分类误差记录的26%到15%。 Facebook、谷歌、亚马逊等知名公司利用卷积网络进行图像识别、商品推送等工作。


CNN卷积神经网络是一个大家庭,对图像来说主要有以下四个关键技术应用。


物体的位置:预测包含主要物体的图像区域,识别区域内的物体。 物体识别:对分割的目标进行分类。 对象分割:将图像对象分割为图像上的像素。 例如,人类、建筑物等。 关键点检测:从图像中检测目标物体上某个关键点的位置,例如人脸的关键点信息。 CNN网络培训数据集已发布,支持全世界的开发人员下载培训模型数据集。


(1) MNIST )最受欢迎的深度学习数据集之一。 包含60,000个样本的训练集和10,000个样本的测试集的手写数字数据集。 358深度学习. net /教程/入门. html


(2) ImageNet )李飞飞创立的全球视觉识别挑战数据集(ILSVRC )。 3358图像-网络. org /索引


(3) PASCAL )标准化的优秀数据集。 数据集可用于图像分类、目标检测和图像分割。 358主机.机器人. OX.AC.UK/Pascal/Voc /


4 ) MS-COCO:COCO是一个大型、丰富的物体检测、分割和字幕数据集。 3358 coco数据集. org /


为什么要用CNN处理图像呢?


理由很简单,因为可以在短时间内提取出图像的特征。


通常,普通的神经网络将输入层和隐含层完全连接,使得系统能够提取图像的特征。 从计算力的观点来分析,小图像可以从整个图像中计算特征。 例如提取2828的小照片的特征,现在的CPU还是足够的。


但是,如果提取9696这样的大图像,则使用这种一般的神经网络的全连接方法来学习图像整体的特征是非常花时间的。 需要设计输入单元,学习100个特征时,有需要运算的参数。


相比之下,9696的图像计算过程比2828的图像处理过程慢100倍。 众所周知,现在的照片是高清的大照片,通常的神经网络无法预测全连接方式何时完成处理。


以下内容是本节的重点部分,具体论述CNN网络的实现过程。


1. 图像的输入我们首先要弄清楚一张照片是怎么输入到神经网络的。 众所周知,计算机适合处理的是矩阵运算,所以只有将图像转换为矩阵,计算机才能识别。 的彩色图像全部由红绿蓝(RGB )叠加而成,分为图像的三个通道。 一张图片保存在电脑上也是由这三个矩阵完成的。




图4-23图中的色彩通道


如图4-23所示,64*64像素的图像。 例如,白色可以表示为RGB (255,255,255 ),可以使用三个64*64大小的矩阵来表示此图。 上面的手指画了三个5 * 4矩阵来表示64*64的全尺寸矩阵。 三个矩阵RGB被称为图像的三个通道,也用作神经网络的输入数据。


2. 卷积神经网络的组成和其他神经网络一样,CNN网络也同样包括输入层、隐藏层、输出层几大部分,卷积神经网络的主要运算过程如图4-24所示。


图4-24卷积神经网络处理过程


卷积层(Convolutional layer ) :卷积层由多个卷积单元构成,各个卷积单元的参数通过反向传播算法进行优化。 卷积运算主要是为了提取图像的特征,随着卷积层的增加,多层网络可以提取更复杂的图像特征。


整流(ReLU

layer):主要指的是激活函数运算(Activation function)使用线性整流的ReLu函数(Rectified Linear Units, ReLU)。

池化层(Pooling layer):在卷积之后图像的维度特征依然很多,将特征矩阵分割成几个单个区块,取其最大值或平均值,起到了降维的作用。

全连接层(Fully-Connected layer):把所有局部特征以及各通道的特征矩阵结合变为向量代表,计算最后每一类的得分。

3. 计算过程

CNN网络的计算过程如图XXX,每个组成模块代表了不同的计算内容。

(1)数据规则化

彩色图像的输入通常先要分解为R(红)G(绿)B(蓝)三个通道,其中每个值介于0~255之间。

(2)卷积运算(Convolution)

前面讲到,由于普通的神经网络对于输入与隐层采用全连接的方式进行特征提取,在处理图像时,稍微大一些的图将会导致计算量巨大而变得十分缓慢。卷积运算正是为了解决这一问题,每个隐含单元只能连接输入单元的一部分,我们可以理解为是一种特征的提取方法。

首先我们来明确几个基础概念:深度(depth)、步长(stride)、补零(zero-padding)、卷积核(convolution kernel)。

深度(depth):深度指的是图的深度与它控制输出单元的深度,也表示为连接同一块区域的神经元个数。

步幅(stride):用来描述卷积核移动的步长。

补零(zero-padding):通过对图片边缘补零来填充图片边缘,从而控制输出单元的空间大小。

卷积核(convolution kernel):在输出图像中每一个像素是输入图像中一个小区域中像素的加权平均的权值函数。卷积核可以有多个,卷积核参数可以通过误差反向传播来进行训练。

如图4-25为步长=1的卷积计算过程,卷积核依次向右移动进行卷积运算得到相应结果。

图4-25 卷积运算过程

为图像计算可以对边缘进行补零,可见这个过程改变了图像的运算大小,如图4-26所示。

卷积运算的过程其实非常简单,过程如图4-27描述,可以概括为公式(4.3.6)。其中B代表卷积后的结果,K是卷积核,A为图像的输入矩阵。

图4-27 卷积运算过程

如图4-27所示,可见卷积核K为2*2的卷积核,详细运算过程如下。

全部图像卷积运算可以通过公式(4.3.6)进行。

(3)激活

CNN卷积神经网络在卷积后需要经过激活过程,当前通常使用的激活函数是Relu函数。Relu函数的主要特点在之前的章节已经讲过。从函数的图像上来看,单侧抑制,相对宽阔的兴奋边界,具有稀疏激活性的特点。

(4)池化(Pooling)

池化的目的是提取特征,减少向下一个阶段传递的数据量。池化操作相对于对每个深度切片是独立,池化规模一般为像素的 2*2,与卷积运算相比,池化层运算一般有以下几种:

最大池化(Max Pooling):取4个点数值的最大值。这是最常用的池化算法。均值池化(Mean Pooling):取4个点数值的均值。高斯池化(Gauss Pooling):按照高斯模糊的方法。

如图4-28,描述了最大池化的计算方法。

图4-28 池化运算过程

(5)全连接(Fully-connected layer)

全连接层一般出现最后几步,在卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。全连接过程是对矩阵的展开过程,也可以理解为输出矩阵与一个1*1的卷积核进行卷积运算,最后展开为一个1*n的向量。

在卷积神经网络中,全连接层一般使用Softmax函数来进行分类。Softmax函数适用于数据分类,用于保证每个分类概率总和为1。

卷积神经网络(CNN)的计算过程虽然讲解繁琐,但对于了解深刻理解神经网络算法非常有益。卷积神经网络经过近30年的发展拥有多条网络发展分支,并且持续高速发展之中。其中有网络层数加深的VGG16与VGG19等,有卷积模块增强的NIN网络等,从分类任务向目标检测任务过度的新型网络R-CNN等,图4-29展示了卷积神经网络的不同发展分支。

#专栏作家#

白白,人人都是产品经理专栏作家。公众号:白白说话(xiaob-talk)。医药行业资深产品专家,负责人工智能行业类产品综合架构与技术开发。在行业云产品架构,药物设计AI辅助、医疗知识图谱等领域有深入研究。

本文原创发布于人人都是产品经理。未经许可,禁止转载。

题图来自Unsplash,基于 CC0 协议


推荐阅读
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 利用ZFS和Gluster实现分布式存储系统的高效迁移与应用
    本文探讨了在Ubuntu 18.04系统中利用ZFS和Gluster文件系统实现分布式存储系统的高效迁移与应用。通过详细的技术分析和实践案例,展示了这两种文件系统在数据迁移、高可用性和性能优化方面的优势,为分布式存储系统的部署和管理提供了宝贵的参考。 ... [详细]
  • Vi编辑器的工作模式有哪些?如何在不同模式间切换?
    Vi编辑器是Linux系统中常用的文本编辑工具,具备三种主要工作模式:命令模式、插入模式和底行模式。用户可以通过特定的按键组合在这些模式之间进行切换,以实现不同的编辑功能。例如,在命令模式下,用户可以执行移动光标、删除文本等操作;而在插入模式下,则可以输入或修改文本内容。底行模式则用于执行保存文件、退出编辑器等命令。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • PHP自学必备:从零开始的准备工作与工具选择 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
author-avatar
蔡士奇佳霖哲维
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有