卷积神经网络在几个主流的神经网络开源架构上面都有实现,我这里不是想实现一个自己的架构,主要是通过分析一个最简单的卷积神经网络实现代码,来达到进一步的加深理解卷积神经网络的目的.

笔者在github上找到了一个十分简单的卷积神经网络python的代码实现:

https://github.com/ahmedfgad/NumPyCNN

具体的怎么使用这里就不用说了,这里都有介绍,我只是分析一下这个代码的实现过程并解析代码,梳理一下神经网络是怎么使用的和构造原理.

一般的神经网络主要包含几个步骤:

  1. 准备滤波器。

  2. 卷积层:使用滤波器对输入图像执行卷积操作。

  3. ReLU 层:将 ReLU 激活函数应用于特征图(卷积层的输出)。

  4. 最大池化层:在 ReLU 层的输出上应用池化操作。

  5. 堆叠卷积层、ReLU 层和最大池化层。

 我也按照这几个步骤去分析代码:

一 准备滤波器:

  根据滤波器的数量和每个滤波器的大小创建数组。我们有 2 个大小为 3*3 的滤波器,因此数组大小为 (2=num_filters, 3=num_rows_filter, 3=num_columns_filter)。将滤波器的尺寸选择为没有深度的 2D 数组,因为输入图像是灰度图且深度为 1。如果图像是具有 3 个通道的 RGB,则滤波器大小必须是(3, 3, 3=depth)。

滤波器组的大小由上述 0 数组指定,但不是由滤波器的实际值指定。可以按如下方式覆写这些值,以检测垂直和水平边缘。

二 卷积处理:

  在准备好滤波器之后,下一步就是用它们对输入图像执行卷积操作。下面一行使用 conv 函数对图像执行卷积操作:

此类函数只接受两个参数,即输入图像数据和滤波器数组,它的实现如下:

  这个函数都做了些什么呢?下面我们逐一进行分析一下:

  1 对卷积的过滤器做检查,确保过滤器符合以下约束条件(行列为奇数并且相等),确保过滤器和图像的维度相同.

  2 创建空的一个卷积提取特征的数组

  3 针对两维的卷积网络做卷积特征提取:conv_

  从这里可以总结出,这个函数的作用就是使用过滤器对图像做卷积处理,并提取出特征值以供后面使用.  

三 ReLU激活函数层

  ReLU层将ReLU激活函数应用于conv层输出的每个特征图上,根据以下代码行调用ReLU激活函数:

ReLU激活函数(ReLU)的具体实现代码如下:

  ReLU思想很简单,只是将特征图中的每个元素与0进行比较,若大于0,则保留原始值。否则将其设置为0。

四 最大池化层

  ReLU层的输出作为最大池化层的输入,根据下面的代码行调用最大池化操作:

最大池化函数(max pooling)的具体实现代码如下:

该函数接受3个参数,分别为ReLU层的输出,池化掩膜的大小和步幅。首先也是创建一个空数组,用来保存该函数的输出。数组大小根据输入特征图的尺寸、掩膜大小以及步幅来确定.

对每个输入特征图通道都进行最大池化操作,返回该区域中最大的值,这个就是最大池化.这就达到了降采样的目的.

参考文档:

1 https://www.jiqizhixin.com/articles/2018-05-29

2 https://yq.aliyun.com/articles/585741

卷积神经网络CNN的原理(三)---代码解析的更多相关文章

  1. 深度学习之卷积神经网络(CNN)详解与代码实现(一)

    卷积神经网络(CNN)详解与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10430073.html 目 ...

  2. 深度学习之卷积神经网络(CNN)详解与代码实现(二)

    用Tensorflow实现卷积神经网络(CNN) 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10737065. ...

  3. 卷积神经网络CNN的原理(一)---基本概念

    什么是卷积神经网络呢?这个的确是比较难搞懂的概念,特别是一听到神经网络,大家脑海中第一个就会想到复杂的生物学,让人不寒而栗,那么复杂啊.卷积神经网络是做什么用的呢?它到底是一个什么东东呢? 卷积神经网 ...

  4. 【转载】 深度学习之卷积神经网络(CNN)详解与代码实现(一)

    原文地址: https://www.cnblogs.com/further-further-further/p/10430073.html ------------------------------ ...

  5. 卷积神经网络(CNN)的训练及代码实现

    本文部分内容来自zouxy09的博客.谢谢.http://blog.csdn.net/zouxy09/article/details/9993371 以及斯坦福大学深度学习教程:http://ufld ...

  6. 卷积神经网络CNN的原理(二)---公式推导

    卷积神经网络与普通神经网络的区别在于,卷积神经网络包含多个由卷积层和池化层构成的特征抽取器.在卷积神经网络的卷积层中,一个神经元只与部分邻层神经元连接.在CNN的一个卷积层中,通常包含若干个特征平面( ...

  7. 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  8. 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  9. 卷积神经网络CNN原理以及TensorFlow实现

    在知乎上看到一段介绍卷积神经网络的文章,感觉讲的特别直观明了,我整理了一下.首先介绍原理部分. [透析] 卷积神经网络CNN究竟是怎样一步一步工作的? 通过一个图像分类问题介绍卷积神经网络是如何工作的 ...

随机推荐

  1. Python-docx 读取word.docx内容

    第一次写博客,也不知道要写点儿什么好,所以就把我在学习Python的过程中遇到的问题记录下来,以便之后查看,本人小白,写的不好,如有错误,还请大家批评指正! 中文编码问题总是让人头疼,想要用Pytho ...

  2. python基础之Day20part2

    面向过程:核心是过程,解决问题的步骤,先干嘛后干嘛,机械流水线 复杂问题流程化简单化但扩展性差 面向对象:核心是对象,是特征与对象的集合体,基于该思想编写程序,就好比上帝造世界,上帝式的思维方式 扩展 ...

  3. JSP 页面跳转中的参数传递

    1. 从一个 JSP 页面跳转到另一个 JSP 页面时的参数传递 1)使用 request 内置对象获取客户端提交的信息 2)使用 session 对象获取客户端提交的信息 3)利用隐藏域传递数据 4 ...

  4. 20165213 Exp4 恶意代码分析

    恶意代码分析 实践目标 1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,sy ...

  5. vs2015 不能启动 iis express

    删除以下目录的文件 <<path_to_solution_folder>>\.vs\config\applicationhost.config具体地址http://stacko ...

  6. 基于TeamCity的asp.net mvc/core,Vue 持续集成与自动部署

    一 Web Server(Windows)端的配置 1.配置IIS,重要的是管理服务 1.1 配置FTP(前端NPM项目需要) 该步骤略,如果是在阿里云ESC上,需要开启端口21(用来FTP认证握手) ...

  7. 每日一练ACM 2019.0416

    2019.04.16     Problem Description Your task is to Calculate the sum of some integers.   Input Input ...

  8. call和apply(学习笔记)

    call() call() 方法调用一个函数, 其具有一个指定的this值和分别地提供的参数(参数的列表). 语法: function.call(thisArg, arg1, arg2, ...) 参 ...

  9. 摘录<小王子>——[法]安东·圣埃克苏佩里

    四 大人们都喜欢数字.你要是向他们说起一个新朋友,他们提出的问题从来问不到点子上. 他们绝不会问:"他的嗓音怎么样?他喜欢什么游戏?比如,他喜欢搜集蝴蝶标本吗?" 他们总是问你:& ...

  10. poj 3687 Labeling Balls(拓补排序)

    Description Windy has N balls of distinct weights from 1 unit to N units. Now he tries to label them ...