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

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. iOS UITableViewCell的"滑动出现多个按钮"

    本文授权转载,作者:@夏天是个大人了 前言: 本篇博客其实就是想介绍tableviewcell滑动的一些"事",昨天在逛github的时候看到的还挺有意思的三方库,简单用了一下感觉 ...

  2. 自动化服务安装部署工具-Ansible

    自动化运维工具Ansible详细部署 ================================================================================= ...

  3. sprint3总结

    经过了半个学期以来的sprint冲刺,并且充分学习了android开发后对项目有了更加充分的认识理解,开发速度自然而然就上来了,没有了上一个学期的懵懂,虽然开发起来还是比较困难,但是胜在有同组组员帮忙 ...

  4. async 和 await小结

    三大返回值: 返回类型 - Task<TResult> 返回类型 - Task 返回类型 - void 当你添加 async 关键字后,需要返回一个将用于后续操作的对象,请使用 Task& ...

  5. Quartz2D 编程指南(一)概览、图形上下文、路径、颜色与颜色空间

    概览 图形上下文 路径 颜色与颜色空间 变换 图案 阴影 渐变 透明层 Quartz 2D 中的数据管理 位图与图像遮罩 CoreGraphics 绘制 Layer 0.说明 本篇博客主要是对官方文档 ...

  6. CSS样式常用属性整理

    web工程师是最近5年刚刚兴起的一门高薪职业,人们的专注度越来越高. 那么前端除了学习html标签之外还需要掌握什么知识点呢? 为大家整理了一个和HTML标签密不可分的知识要点--<CSS样式常 ...

  7. JS中generater和箭头函数

    generater跟函数很像: function* fn(x){ yield x; yield x++; return x;} 如上所示,generater用function*定义,可以用yield返 ...

  8. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  9. 9月10日,美团网2014校招研发笔试哈尔滨站 1、链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6,用程序实现

    // reverselink.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" struct Node{ int num; struct No ...

  10. 添加群组表AppGroup和群组详细表AppGroupDetails

    添加群组表AppGroup和群组详细表AppGroupDetails CREATE TABLE [dbo].[AppGroup]( ) NOT NULL PRIMARY KEY, ) NOT NULL ...