CNN Application
文章目录
- pattern
- filter pattern
- neuron pattern
- output pattern
- Application
- Deep Dream
- Deep Style
- Playing Go
- Speech
- Text
pattern
filter pattern
这里希望了解filter能够识别pattern究竟是什么,首先定义filter的激活程度。
Degree of the activation of filter:
A = ∑ i = 1 n ∑ j = 1 n a i j A=\sum\limits^{n}_{i=1}\sum\limits^{n}_{j=1} a_{ij} A=i=1∑nj=1∑naij
- a i j a_{ij} aij:filter对image卷积后的矩阵元素
也就是把filter对image进行卷积后输出的矩阵元素全部加和,当作该filter被激活的程度。这个数值越大,filter被激活程度越大,则image与filter的pattern越相符,那么如果找到最能够激活filter的image,那这个image也就是filter的pattern。
gradient ascend:
x ∗ = arg max x A x^*=\arg \max\limits_x A x∗=argxmaxA
- x x x代表被卷图片
寻找filter的pattern的问题,最终转变为寻找图片的能够最大程度激活filter,以被卷图片 x x x为自变量,使用梯度上升,寻找使 A A A数值最大的图片。
部分结果:
这些是能够是各自filter的激活程度达到最大的输入图片,都代表某种texture,这里为这这些filter专为识别图像中的texture。
neuron pattern
这里希望了解DNN中neuron能够识别pattern,寻找图片能够最大化neuron输出,方法依然是gradient ascend。
gradient ascend:
x ∗ = arg max x a x^*=\arg \max\limits_x a x∗=argxmaxa
- a a a表示neuron的输出
- x x x代表输入图片
部分结果
与filter所观察到的情形非常不一样,filter所在意的是texture,而neuron在意的地方似乎难以理解,直观上讲,filter是对一个regin进行识别,而neuron则是对整个图像,neuron所识别的pattern更加抽象。
output pattern
这里希望了解network输出的每个类别的pattern,寻找图片能够最大化network某个维度的输出,network就认为这张图片是相应类别最标准的图片。
gradient ascend:
x ∗ = arg max x y i x^*=\arg \max_x y^i x∗=argxmaxyi
- y i y^i yi表示network某一维度的输出
- x x x代表输入图片
在手写数字识别上的结果
原本认为这个方法就可以让network自动它认为的标准数字图像,但实际的结果也是相当抽象,和我们的认知不太一致。
进一步处理
image里的每一个pixel都用 x i j x_{ij} xij表示,把所有pixel值取绝对值并求和 ∑ i , j ∣ x i j ∣ \sum\limits_{i,j}|x_{ij}| i,j∑∣xij∣,用 y i y^i yi减去这一项:
x ∗ = arg max x ( y i − ∑ i , j ∣ x i j ∣ ) x^*=\arg \max\limits_x (y^i-\sum\limits_{i,j} |x_{ij}|) x∗=argxmax(yi−i,j∑∣xij∣)
- 这一项相当于在我们的目标函数中加上L1 regularization
此时目标函数希望找到input,使 y i y^i yi最大的同时, ∑ i , j ∣ x i j ∣ \sum\limits_{i,j} |x_{ij}| i,j∑∣xij∣越小越好,也就意味着,我们希望找出来的图像,既是network认为理想的图像,同时又是涂有颜色区域相对少的图像。
before
|
after
|
对比之下,处理后的结果可以看出些数字的迹象了。
Application
Deep Dream
Deep Dream就是给machine一张image,它会在这张image里加上它看到的东西。
先找一张image,然后将这张image丢到CNN中,把它的某一个hidden layer拿出来(vector),把这个vector的postitive dimension值调大,negative dimension值调小。然后把这个调节之后的vector当做新的image的目标,然后找一张image(modify image)用GD方法,让它在同一个hidden layer上的output是之前设下的target。这样做使得filter的激活程度变大,能够让CNN夸大化它所看到的东西。
Deep Style
input两张image,让machine去修该一张图,模仿另外一张图的风格 (风格迁移)。
image content:filter output的value,代表一张image中的content
image style:filter和filter的output之间的correlation,代表了一张image的style
首先将两张图丢进CNN中分别得到目标image content和image style。CNN去找一张image,这张image的filter output与image content吻合;image的filter output之间的correlation与目标style吻合。方法依然是使用gradient descent找到一张image,同时最大化包含image content和image style的目标函数。
Playing Go
对于下围棋这件事,也就是找一个function,它的input是棋盘当前局势,output是你下一步应该落子的位置,这样其实就可以让machine学会下围棋了,所以用fully connected的feedforward network也可以做到让machine下围棋这件事情。
DNN
使用DNN的话,将一个 19 × 19 19×19 19×19的棋盘flatten成一个vector,vector的每一个dimension对应到棋盘上的某一个位置(1代表黑子,-1代表白子,0代表空白),丢到一个fully connected的feedforward network里,output也是 19 × 19 19×19 19×19个dimension ,每一个dimension对应到棋盘上的一个位置。
CNN
使用CNN的话,直接将一个 19 × 19 19×19 19×19的棋盘直接表示成matrix作为input,output下一步要落子的位置。
在围棋中有一些特性和图像处理很相似,对于整个棋局的局势,通常聚焦于某个局部,不需要看整个棋盘,那么以一个小范围的pattern可以解决问题。在AlphaGo里面,它第一个layer的convolution是 5 × 5 5×5 5×5的filter,设计人认为围棋上最基本的pattern可能都是在 5 × 5 5×5 5×5的范围内就可以被检测出来;同样的pattern可能会出现在不同的region,可以用同一个detector,来处理这些在不同位置的同样的pattern。
max pooling in playing go
max pooling基于对一个image做subsampling,你拿掉奇数行、偶数列的pixel,对图像的理解没有太大偏差的事实,但是,对围棋来说,并不是这样,比如说,你对一个棋盘丢掉奇数行和偶数列,那它还和原来就相当不同。所以无法使用max pooling。
Speech
把一段声音表示成spectrogram,spectrogram的横轴是时间,纵轴则是这一段时间里声音的频率,在语音上,只考虑在frequency(频率)方向上移动的filter,宽和image的宽是一样的,并且filter只在Frequency即纵坐标的方向上移动,而不在时间的序列上移动
Text
目的是input一个word sequence,让machine侦测这个word sequence是positive的还是negative的。
这个word sequence里面的每一个word都用一个vector来表示,vector代表的这个word本身的semantic ,那如果两个word本身含义越接近的话,它们的vector在高维的空间上就越接近,这个东西就叫做word embedding。
把一个sentence里面所有word的vector排在一起,它就变成了一张image,丢到CNN里面,filter只按照word sequence的顺序移动,而不在这个embedding的dimension上移动;因为在embedding里面,不同dimension是独立的。
CNN Application相关推荐
- 第五节 Convolutional Neural Network (CNN)
第五节 Convolutional Neural Network (CNN) 1. image classification 图像分类 首先假设输入模型的所有图片的大小都是固定的.如果图像不一样就线r ...
- 卷积神经网络CNN(8)—— Pix2Pix Application -- Aerialmap Lane Line Detection (Pix2Pix应用:航拍图车道线检测)
卷积神经网络CNN(8)-- Pix2Pix Application -- Aerialmap Lane Line Detection (Pix2Pix应用:航拍图车道线检测)
- Complex-Valued CNN and Its Application in Polarimetric SAR Image Classification
这里写目录标题 Abstract Method Results Note Abstract Following the great success of deep convolutional neur ...
- 吴恩达深度学习CNN作业:Convolutional Neural Networks: Application
- Winograd,GEMM算法综述(CNN中高效卷积实现)(上)
高效卷积实现算法和应用综述(上) 在下一篇文章会介绍Winograd算法的应用,在ICLR,CVPR,FPGA,FCCM等机器学习和FPGA领域的定会上的 ...
- CNN网络中的 1 x 1 卷积是什么?
上面是一个 1x1 卷积核的输出示意图, 如果是 K 个1x1 卷积核,那么 结果就是 将通道数由 D 变为 K 降维或升维 特征通道数变化: 256 -> 64 -> 256 http: ...
- 深度学习~卷积神经网络(CNN)概述
目录 1. 卷积神经网络的形成和演变 1.1 卷积神经网络结构 1.2 卷积神经网络的应用和影响 1.3 卷积神经网络的缺陷和视图 1.3.1 缺陷:可能错分 1.3.2 解决方法:视图 ...
- DL之CNN:利用CNN(keras, CTC loss, {image_ocr})算法实现OCR光学字符识别
DL之CNN:利用CNN(keras, CTC loss)算法实现OCR光学字符识别 目录 输出结果 实现的全部代码 输出结果 更新-- 实现的全部代码 部分代码源自:GitHub https://r ...
- dropout层_DNN,CNN和RNN的12种主要dropout方法的数学和视觉解释
深入研究DNN,CNN和RNNDropout方法以进行正则化,蒙特卡洛不确定性和模型压缩 动机 在(深度)机器学习中训练模型时的主要挑战之一是协同适应. 这意味着神经元彼此非常依赖. 它们彼此之间影响 ...
最新文章
- [原创]使用 NodeJS, MarkdownJS, PrettifyJS 打造个人博客写作平台 - 整体思路
- ASP.NET三层数据操作与GridView互动
- 设计模式复习-单例模式
- 创建一个 Django 项目
- 关于卡巴斯基6.0自动升级时报错后自动退出的情况
- mysql打开无法控制_MySQL不能启动和停止 MySQL各种解决方法教程
- hdu5468 Puzzled Elena
- js中startsWith 函数不能在任何浏览器兼容的问题
- 老照片的复活,焕发生机与跃然纸上!这篇CVPR2020的论文彻底火了
- [Angularjs]angular ng-repeat与js特效加载先后导致的问题
- python的namedtuple
- 性能测试--jmeter中参数化【14】
- 联想y7000笔记如何安装matlab,联想y7000p安装配置ubuntu笔记
- 全球与中国多模连续光纤激光器市场现状及未来发展趋势
- 利用Python处理辅助明细账并计算账龄
- 2022-2028全球与中国品牌许可市场现状及未来发展趋势
- AI在实时音视频互动中应用的 n 种姿势
- 【SVN】教你如何替换主干代码
- 在AD中创建子域和域树
- #71 go-ini 配置库评析 by 无闻(unknwon)【 Go 夜读 】
热门文章
- 使用pandas处理excel,并使用Openpyxl修改单元格格式
- 国内数藏造富只是个例,散户见好就收
- python 如何判断当天为周几?判断当天是否为工作日?
- 在现有oracle服务器上新建一个oracle实例
- vivado基本开发流程
- 一分钟了解蒙特卡洛方法
- Coursera | Andrew Ng (02-week-1-1.7)—理解 Dropout
- python的ppt报告_Python学习报告.ppt
- Linux计划任务介绍
- java中print()和println()的区别