先一层一层的说卷积神经网络是啥:

1:卷积层,特征提取

我们输入这样一幅图片(28*28):

如果用传统神经网络,下一层的每个神经元将连接到输入图片的每一个像素上去,但是在卷积神经网络中,我们只把输入图像的一部分连接到下一层的神经元上。

比如每个神经元连接对应的一个5*5的区域:

这个输入图像的区域被称为隐藏神经元的局部感受野(local receptive fields),它是输入像素上的一个小窗口。每个连接学习一个权重。而隐藏神经元同时也学习一个总的偏置。可以把特定的隐藏神经元看作是在学习分析它对应的那个局部感受野。

然后我们在整个图像上移动局部感受野,移动的步长可以设定,假如每次移动一格,图像数据和权重的对应元素相乘并求和就得到了下一层神经元的值:

这样我们就得到了一个24*24的特征图,注意生成这个特征图时用的5*5的权重和偏置是固定的,这就是共享权重和偏置。这种方法可以降低参数量,同时还可以认为是一种特征的提取。在人工神经网络中,如果输入一幅图片中有一盘烧鸡在图片的角落中,那么输出的烧鸡得分可能不会高,因为图像的大部分信息都和烧鸡无关,但CNN使用这种滑动卷积核寻找特征的方式,无论你这只鸡在哪里,都能提取出他的特征不是吗。图像这个东西,本身就是一个区域的信息更有说服力,一张图的左上角和右上角两块可能真是没什么实际关系,但一张图中间的某一个区域的像素就关系很大了,比如对一张烧鸡的图片截取其中一小块,人也能通过色泽啊肉质判断出来一点点这最起码是禽类的肉而不是哺乳动物的肉,但随机的在图中取一堆点让人判断这是啥就很难了。这是我对CNN处理图像问题优越性的一个认识吧,可能不够严谨,还请高人指教。。。

或者可以理解为,这个5*5的参数就好像是一个人的世界观,他通过逐行查看这个图片,得出了一个结论就是特征图。CNN通常会设定好多个卷积层(好多个特征图),比如一张特征图专门用来查看图像的边缘信息,另一张专门查看图像的对比度信息,还有查看图像里有没有耳朵等等。

图:一个完整的卷积层通常由若干个不同的特征映射组成

这些特征映射的参数并不是人工决定的,而也是通过优化损失函数自动学习得到的,所以在CNN中不是每个特征都是可以用人话描述清楚的。

这就是卷积层,也是卷积神经网络的核心方法。卷积层的每一个特征图中的每个神经元也需要经过一个激活函数的计算以做非线性的映射,这个激活函数通常使用ReLU:

从一些大神口中得知CNN激励函数一定不能使用sigmoid(太容易饱和了,除非你再加一层把所有的值都归一化到0和1之间),优先使用ReLU,如果ReLU训练不下去,就使用Leaky ReLU。

2:Pooling layer

这个层是夹在连续的卷积层之间的一个压缩数据用的层,功能很简单,就是把feature map缩小,有时此层又叫subsampling层,假设有一个特征图如下,使用2*2的max pool来压缩:

同时还可以用L2池化,均值池化,功能都是一样的。

为什么要有这个层呢?我的理解是这样的:首先对于一个feature map,把它缩小后依旧可以判断出这个特征来,就比如一张红色的图,缩小后它还是红色的,其次这样可以缩小卷积层的层数,如果没有池化,那么一层一层卷积层叠起来,最终连接到最后一层全连接层时候,卷积神经网络的深度将很深,也对训练带来了很大的难度。

CNN就是卷积、池化、卷积、卷积这样组合起来的,到了特征图很小的时候,再链接一个全连接层,就可以做分类问题了下图就是一个卷积神经网络的基本组成:

训练卷积神经网络的方法和人工神经网络是一样的,都是先写出来cost function,使用BP求损失函数对各个参数的偏导数,在应用SGD算法迭代得出最优的参数组合。

对于ANN和CNN的原理解析到此为止,从现在开始将使用一些成熟的CNN模型和DL框架实现深度学习的一些功能。

[DL学习笔记]从人工神经网络到卷积神经网络_2_卷积神经网络的更多相关文章

  1. [DL学习笔记]从人工神经网络到卷积神经网络_1_神经网络和BP算法

    前言:这只是我的一个学习笔记,里边肯定有不少错误,还希望有大神能帮帮找找,由于是从小白的视角来看问题的,所以对于初学者或多或少会有点帮助吧. 1:人工全连接神经网络和BP算法 <1>:人工 ...

  2. [DL学习笔记]从人工神经网络到卷积神经网络_3_使用tensorflow搭建CNN来分类not_MNIST数据(有一些问题)

    3:用tensorflow搭个神经网络出来 为什么用tensorflow呢,应为谷歌是亲爹啊,虽然有些人说caffe更适合图像啊mxnet效率更高等等,但爸爸就是爸爸,Android都能那么火,一个道 ...

  3. ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程)

    ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程) ufldl出了新教程,感觉比之前的好,从基础讲起,系统清晰,又有编程实践. 在dee ...

  4. 学习笔记CB009:人工神经网络模型、手写数字识别、多层卷积网络、词向量、word2vec

    人工神经网络,借鉴生物神经网络工作原理数学模型. 由n个输入特征得出与输入特征几乎相同的n个结果,训练隐藏层得到意想不到信息.信息检索领域,模型训练合理排序模型,输入特征,文档质量.文档点击历史.文档 ...

  5. 深度学习笔记 (二) 在TensorFlow上训练一个多层卷积神经网络

    上一篇笔记主要介绍了卷积神经网络相关的基础知识.在本篇笔记中,将参考TensorFlow官方文档使用mnist数据集,在TensorFlow上训练一个多层卷积神经网络. 下载并导入mnist数据集 首 ...

  6. 【深度学习笔记】(二)基于MNIST数据集的神经网络实验

    一.介绍 MNIST(Mixed National Institute of Standards and Technology database)是网上著名的公开数据库之一,是一个入门级的计算机视觉数 ...

  7. 《TensorFlow2深度学习》学习笔记(二)手动搭建并测试简单神经网络(附mnist.npz下载方式)

    本实验使用了mnist.npz数据集,可以使用在线方式导入,但是我在下载过程中老是因为网络原因被打断,因此使用离线方式导入,离线包已传至github方便大家下载: https://github.com ...

  8. 卷积神经网络(CNN)学习笔记1:基础入门

    卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01   |   In Machine Learning  |   9 Comments  |   14935  Vie ...

  9. tensorflow学习笔记——图像识别与卷积神经网络

    无论是之前学习的MNIST数据集还是Cifar数据集,相比真实环境下的图像识别问题,有两个最大的问题,一是现实生活中的图片分辨率要远高于32*32,而且图像的分辨率也不会是固定的.二是现实生活中的物体 ...

随机推荐

  1. PHP while使用

    $i = 0; while(true){ if($i == 0){ $i++; continue; }else if($i > 10){ break; }else{ echo $i." ...

  2. http工作流程

    一次HTTP操作称为一个事务,其工作过程可分为四步:1)首先客户机与服务器需要建立连接.只要单击某个超级链接,HTTP的工作开始.2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源 ...

  3. WordPress基础:小工具的使用

    通过外观->小工具对挂件区域的内容进行调整 比如添加个日历模块 保存后前台就会显示出来 如果不需要,反过来,把模块拖到左边就可以了.

  4. Corex-M0 系统嘀嗒定时器 Systick 详解

  5. gulp任务

    项目使用的gulp自动化任务 //定义输出文件夹名称 var distFolderH5 = "distH5"; var distFolderMofang = "distM ...

  6. 几种获取IP 根据IP获取地址的方法 JS,第三方 新浪 网易 腾讯

    第一种是利用纯真ip数据库,这个可以在网上找到很多,缺点是更新有点慢. 第二种是利用门户网站的接口 目前已知的有腾讯.新浪.网易.搜狐和Google提供IP地址查询API,但是找得到的只有腾讯.新浪和 ...

  7. CentOS6.6安装virtualbox4.1.44

    本人用的是centos6.6,安装了virtualbox 4.1.44,启动后一直如上图报错,哪位前辈如果解决过这样的问题,麻烦指点指点,小弟在此先谢过了.

  8. Android四大组件之Activity

    实验内容 了解Activity的四个状态 Activity的生命周期 启动另外一个Activity 实验要求 编码实现观察Activity的生命周期函数执行过程 编码实现启动另外一个Activity ...

  9. Pyton 模拟Post登录

    import sys import urlib.parse import urllib.request import http.cookiejar import random import math ...

  10. CCNET+MSBuild+SVN实现每日构建

    最近开始将源代码迁移到SVN,于是便考虑到如何从SVN定期获取源码,自动编译并部署以减轻工作量并提高工作效率.通过多方搜集资料并进行研究,基本实现了这个功能.对于每日构建的概念就不具体展开了,可以在各 ...