CNN初步-2

Pooling

为了解决convolved之后输出维度太大的问题

在convolved的特征基础上采用的不是相交的区域处理

?
?

http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/

这里有一个cnn较好的介绍

?
?

Pooling also reduces?the output dimensionality but (hopefully) keeps the most salient information.

By performing the max operation you ?are keeping information about whether or not the feature appeared in the sentence, but you are losing information about where exactly it appeared.?

You are losing?global information about locality?(where in a sentence something happens), but you are keeping local information captured by your filters, like "not amazing" being very different from "amazing not".

?
?

局部信息能够学到 "not amaziing" "amzaing not"这样 bag of word 不行的顺序信息(知道他们是不一样的),然后max pooling仍然能够保留这一信息
只是丢失了这个信息的具体位置

?
?

?
?

There are two aspects of this computation worth paying attention to:?Location Invarianceand?Compositionality. Let‘s say you want to classify whether or not there‘s an elephant in an image. Because you are sliding your?filters over the whole
image you don‘t really care?wherethe elephant occurs.?In practice, ?pooling?also gives you?invariance to translation, rotation and scaling, but more on that later. The second key aspect is (local) compositionality. Each filter?composes?a local patch of lower-level features?into higher-level representation. That‘s why CNNs are so powerful?in Computer Vision.?It makes intuitive sense that you build edges from pixels, shapes from edges, and more complex objects from shapes.

?
?

来自 <http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/>

?
?

?
?

关于conv和pooling可选的参数
PADDING

?
?

You can see how wide convolution is useful, or even necessary, when you have a large filter relative to the input size. In the above, the narrow convolution yields ?an output of size?

, and a wide convolution an output of size?

. More generally, the formula for the output size is?

.

?
?

来自 <http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/>

?
?

narrow对应 tensorflow提供的VALID padding

wide对应tensorflow提供其中特定一种 SAME padding(zero padding)通过补齐0 来保持输出不变
下面有详细解释

?
?

?
?

STRIDE

?
?

这个比较好理解
每次移动的距离,对应pooling, filter size是多少
一般 stride是多少


down vote

?
?

?
?

?
?

?
?

?
?

?
?

?
?

?
?

?
?

?
?

??


tensorflow里面提供SAME,VALID两种padding的选择

关于padding, conv和pool用的padding都是同一个padding算法

?
?

The?TensorFlow Convolution?example gives an overview about the difference between?SAME?and?VALID?:

  • For the?SAME?padding, the output height and width are computed as:
    out_height = ceil(float(in_height) / float(strides1))
    out_width = ceil(float(in_width) / float(strides[2]))

And

  • For the?VALID?padding, the output height and width are computed as:
    out_height = ceil(float(in_height - filter_height + 1) / float(strides1))
    out_width = ceil(float(in_width - filter_width + 1) / float(strides[2]))

?
?

来自 <http://stackoverflow.com/questions/37674306/what-is-the-difference-between-same-and-valid-padding-in-tf-nn-max-pool-of-t>

?
?

示例

In?[2]:

import
tensorflow
as
tf
x = tf.constant([[1., 2., 3.],
[4., 5., 6.]])

x = tf.reshape(x, [1, 2, 3, 1]) # give a shape accepted by tf.nn.max_pool

valid_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding=‘VALID‘)
same_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding=‘SAME‘)

print valid_pad.get_shape() == [1, 1, 1, 1] # valid_pad is [5.]
print same_pad.get_shape() == [1, 1, 2, 1] # same_pad is [5., 6.]

sess = tf.InteractiveSession()
sess.run(tf.initialize_all_variables())
print valid_pad.eval()
print same_pad.eval()

True
True
[[[[ 5.]]]]
[[[[ 5.]
[ 6.]]]]

In?[7]:

x = tf.constant([[1., 2., 3., 4.],
[4., 5., 6., 7.],
[8., 9., 10., 11.],
[12.,13.,14.,15.]])

x = tf.reshape(x, [1, 4, 4, 1]) # give a shape accepted by tf.nn.max_pool

valid_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding=‘VALID‘)
same_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding=‘SAME‘)

print valid_pad.get_shape() # valid_pad is [5.]
print same_pad.get_shape() # same_pad is [5., 6.]

#ess = tf.InteractiveSession()
#ess.run(tf.initialize_all_variables())
print valid_pad.eval()
print same_pad.eval()

(1, 2, 2, 1)
(1, 2, 2, 1)
[[[[ 5.]
[ 7.]]

[[ 13.]
[ 15.]]]]
[[[[ 5.]
[ 7.]]

[[ 13.]
[ 15.]]]]

In?[8]:

x = tf.constant([[1., 2., 3., 4.],
[4., 5., 6., 7.],
[8., 9., 10., 11.],
[12.,13.,14.,15.]])

x = tf.reshape(x, [1, 4, 4, 1]) # give a shape accepted by tf.nn.max_pool

W = tf.constant([[1., 0.],
[0., 1.]])

W = tf.reshape(W, [2, 2, 1, 1])

valid_pad = tf.nn.conv2d(x, W, strides = [1, 1, 1, 1], padding=‘VALID‘)
same_pad = tf.nn.conv2d(x, W, strides = [1, 1, 1, 1],padding=‘SAME‘)

print valid_pad.get_shape()

print same_pad.get_shape()

#ess = tf.InteractiveSession()
#ess.run(tf.initialize_all_variables())
print valid_pad.eval()
print same_pad.eval()

(1, 3, 3, 1)
(1, 4, 4, 1)
[[[[ 6.]
[ 8.]
[ 10.]]

[[ 13.]
[ 15.]
[ 17.]]

[[ 21.]
[ 23.]
[ 25.]]]]
[[[[ 6.]
[ 8.]
[ 10.]
[ 4.]]

[[ 13.]
[ 15.]
[ 17.]
[ 7.]]

[[ 21.]
[ 23.]
[ 25.]
[ 11.]]

[[ 12.]
[ 13.]
[ 14.]
[ 15.]]]]

In?[9]:

x = tf.constant([[1., 2., 3.],
[4., 5., 6.]])

x = tf.reshape(x, [1, 2, 3, 1]) # give a shape accepted by tf.nn.max_pool

W = tf.constant([[1., 0.],
[0., 1.]])

W = tf.reshape(W, [2, 2, 1, 1])

valid_pad = tf.nn.conv2d(x, W, strides = [1, 1, 1, 1], padding=‘VALID‘)
same_pad = tf.nn.conv2d(x, W, strides = [1, 1, 1, 1],padding=‘SAME‘)

print valid_pad.get_shape()

print same_pad.get_shape()

#ess = tf.InteractiveSession()
#ess.run(tf.initialize_all_variables())
print valid_pad.eval()
print same_pad.eval()

(1, 1, 2, 1)
(1, 2, 3, 1)
[[[[ 6.]
[ 8.]]]]
[[[[ 6.]
[ 8.]
[ 3.]]

[[ 4.]
[ 5.]
[ 6.]]]]

In?[?]:

?

?
?

时间: 2024-10-15 05:41:55

CNN初步-2的相关文章

卷积神经网络(CNN)学习算法之----基于LeNet网络的中文验证码识别

由于公司需要进行了中文验证码的图片识别开发,最近一段时间刚忙完上线,好不容易闲下来就继上篇<基于Windows10 x64+visual Studio2013+Python2.7.12环境下的Caffe配置学习 >文章,记录下利用caffe进行中文验证码图片识别的开发过程.由于这里主要介绍开发和实现过程,CNN理论性的东西这里作为介绍的重点,遇到相关的概念和术语请自行研究.目前从我们训练出来的模型来看,单字识别率接近96%,所以一个四字验证码的准确率大概80%,效果还不错,完全能满足使用,如果

Tensorflow的CNN教程解析

之前的博客我们已经对RNN模型有了个粗略的了解.作为一个时序性模型,RNN的强大不需要我在这里重复了.今天,让我们来看看除了RNN外另一个特殊的,同时也是广为人知的强大的神经网络模型,即CNN模型.今天的讨论主要是基于Tensorflow的CIFAR10教程,不过作为对比,我们也会对Tensorflow的MINST教程作解析以及对比.很快大家就会发现,逻辑上考虑,其实内容都是大同小异的.由于所对应的目标不一样,在数据处理方面可能存在着些许差异,这里我们以CIFAR10的为基准,有兴趣的朋友欢迎去

深度学习算法实践10---卷积神经网络(CNN)原理

其实从本篇博文开始,我们才算真正进入深度学习领域.在深度学习领域,已经经过验证的成熟算法,目前主要有深度卷积网络(DNN)和递归网络(RNN),在图像识别.视频识别.语音识别领域取得了巨大的成功,正是由于这些成功,能促成了当前深度学习的大热.与此相对应的,在深度学习研究领域,最热门的是AutoEncoder.RBM.DBN等产生式网络架构,但是这些研究领域,虽然论文比较多,但是重量级应用还没有出现,是否能取得成功还具有不确定性.但是有一些比较初步的迹象表明,这些研究领域还是非常值得期待的.比如A

初步了解CPU

了解CPU By JackKing_defier 首先说明一下,本文内容主要是简单说明CPU的大致原理,所需要的前提知识我会提出,但是由于篇幅我不会再详细讲解需要的其他基础知识.默认学过工科基础课. 一.总述 先从计算机的结构说起,在现代计算机中,CPU是核心,常常被比喻为人的大脑.现在的计算机都为“冯·诺依曼机”,“冯诺依曼机”的一个显著的特点就是由运算器.存储器.控制器.输入设备和输出设备组成.CPU是运算器和控制器合起来的统称,因为运算器和控制器在逻辑关系和电路结构上联系十分紧密,尤其在大

自然语言处理中CNN模型几种常见的Max Pooling操作

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 CNN是目前自然语言处理中和RNN并驾齐驱的两种最常见的深度学习模型.图1展示了在NLP任务中使用CNN模型的典型网络结构.一般而言,输入的字或者词用Word Embedding的方式表达,这样本来一维的文本信息输入就转换成了二维的输入结构,假设输入X包含m个字符,而每个字符的Word Embedding的长度为d,那么输入就是m*d的二维向量. 图1 自然语言处理中CNN模型典型网络结构 这里可以

深度学习与自然语言处理之四:卷积神经网络模型(CNN)

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 大纲如下: 1.CNN基础模型 2.单CNN模型的改进    2.1对输入层的改进    2.2Convolution层的改进    2.3Sub-Sampling层的改进    2.4全连接层的改进 3.多CNN模型的改进 4.探讨与思考 扫一扫关注微信号:"布洛卡区" ,深度学习在自然语言处理等智能应用的技术研讨与科普公众号.

zerglurker的C语言教程004——指针初步讲解

在上次的教程里面,我提到了指针. 针对指针,这次我将简单的讲讲,后面我还会讲到--那个时候你应该有了相当的基础. 首先,先讲讲指针类型. 任何类型关键字后面加一个*符号,就会变成指针类型. 比如: char → char* 字符指针 int → int* 整数指针 double→double* 双精度指针 甚至还可以这样: char*→char** 字符指针的指针类型 →char*** 字符指针的指针的指针类型- 指针本质上是一个内存地址值,该内存地址上存放的是相关类型的数值.但是void*指针

nodejs,webpack安装以及初步运用

nodejs安装: 1.下载:https://nodejs.org/en/download/ 2.安装node-v6.11.3-x64.msi文件,直接默认安装(next--): 3.验证是否完成安装:cmd 进入后输入命令 node -v  回车能得到nodejs版本号: 输入node 回车再输入console.log('aaaaa') 回车能正常显示输出. 这表示nodejs安装成功. webpack安装: 1.npm安装:在f盘新建文件夹webpack,在webpack文件夹建文件夹dem

CNN卷积神经网络的改进(15年最新paper)

回归正题,今天要跟大家分享的是一些 Convolutional Neural Networks(CNN)的工作. 大家都知道,CNN 最早提出时,是以一定的人眼生理结构为基础,然后逐渐定下来了一些经典的架构--convolutional 和 pooling 的交替,最后再加上几个 fully-connected layers 用作最后做 prediction 等的输出.然而,假设我们能"反思"经典,深入剖析这些经典架构中的不同 component 的作用.甚至去改进它们,有时候可能有许