tensorflow卷积神经处理过程中的conv2d和max_pool

(ps:在写conv2d和max_pool之前在网上有位朋友已经把这个方法讲解得很透彻,我把连接奉上,http://blog.csdn.net/mao_xiao_feng/article/details/53444333http://blog.csdn.net/mao_xiao_feng/article/details/53453926 开头部分我先作下简单的表述)

首先看下官方文档的关于conv2d

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)

除去name和use_cudnn_on_gpu,与方法有关的一共四个参数:

  • 第一个参数input:指需要做卷积的输入图像,它要求是一个Tensor,具有[batch, in_height, in_width, in_channels]这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数]

比方我们这么写意味着:输入值为数量为10的28x28x像素的有一个图像通道的图片

input_data = tf.Variable(tf.random_uniform([10, 28, 28, 1]))

(关于图像的通道,在做测试的时候mnist就是只有一个颜色通道的灰色图,而CIFAR-10则拥有RGB三种颜色的通道)

  • 第二个参数filter:是CNN中的卷积核,它要求是一个Tensor,具有[filter_height, filter_width, in_channels, out_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数],有一个地方需要注意,第三维in_channels,就是参数input的第四维。而第四纬的out_channels则代表卷积核需要提取的特征。

以下的写法卷积核截取5x5的大小的图片,第三个纬度1与input_data对应,提取32种特征

W_con = tf.Variable(tf.random_uniform([5, 5, 1, 32]))
  • 第三个参数strides:卷积时在图像每一维的步长,这是一个一维的向量,长度4

  • 第四个参数padding:只能写"SAME","VALID"其中之一,写SAME的话在做滑动遇到元素不足时允许补全,VALID遇到此情况则多余会被抛弃

我们用代码对mnist做实际的测试,首先引入tensorflow、mnist和numpy


import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

首先对于mnist手写数字测试集,相当多的资料讲述已经很多了,简单的说它包含两部分数据,一部分是像素28x28的灰色调图片,另一部分是这些这些图片的指代数字。

比如我们首取一个数据,输出batch_x的shape,batch_y我们暂不理会

batch_x,batch_y=mnist.train.next_batch(1)
print np.shape(batch_x)
输出结果:

(1, 784)

可见batch_x是由28x28=784像素组成的图片,并且我们还发现,原始的数据的纬度不符合运算规则,这时候我们需要进行reshape,然后才能得到我们一开始所说的 [图片数量、宽度、高度、颜色通道]

input_data=tf.reshape(batch_x,[1,28,28,1])

为了便于我们观察卷积神经的处理过程中维度shape的变化,我们先定义两个通用的卷积和池化方法:

def conv2d(x, W):
    return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')


def max_pool_2x2(x):
    return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
#第一层卷积,提取32种特征
W_conv1 = tf.Variable(tf.random_uniform([5, 5, 1, 32]))
b_conv1 = tf.constant(0.1, shape=[32])
h_conv1 = conv2d(input_data, W_conv1)
conv2d_relu1 = tf.nn.relu(h_conv1 + b_conv1)
pooling1 = max_pool_2x2(conv2d_relu1)

#第二层卷积,提取64种特征
W_conv2 = tf.Variable(tf.random_uniform([5, 5, 32, 64]))
b_conv2 = tf.constant(0.1, shape=[64])
h_conv2 = conv2d(pooling1, W_conv2)
conv2d_relu2 = tf.nn.relu(h_conv2 + b_conv2)
pooling2 = max_pool_2x2(conv2d_relu2)

打印一下两层卷积处理过程的数据变化,可以为:

sess = tf.InteractiveSession()
tf.global_variables_initializer().run()

print 'input_data:  ', np.shape(input_data)
print 'conv2d_relu1:', np.shape(sess.run(conv2d_relu1))
print 'pooling1:    ', np.shape(sess.run(pooling1))
print 'conv2d_relu2:', np.shape(sess.run(conv2d_relu2))
print 'pooling2:    ', np.shape(sess.run(pooling2))
输出结果:

input_data: (1, 28, 28, 1)
conv2d_relu1: (1, 28, 28, 32)
pooling1: (1, 14, 14, 32)
conv2d_relu2: (1, 14, 14, 64)
pooling2: (1, 7, 7, 64)

我们发现每一步运行conv2d,数据末尾的纬度值都会变成我们预先设定的特征值,而结果经过池化pooling,图片的尺寸也是成半的减少

未完待续...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 175,490评论 5 419
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 74,060评论 2 335
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 124,407评论 0 291
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 47,741评论 0 248
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 56,543评论 3 329
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 43,040评论 1 246
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 34,107评论 3 358
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 32,646评论 0 229
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 36,694评论 1 271
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 32,398评论 2 279
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 33,987评论 1 288
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 30,097评论 3 285
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 35,298评论 3 282
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 27,278评论 0 14
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 28,413评论 1 232
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 38,397评论 2 309
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 38,099评论 2 314

推荐阅读更多精彩内容

  • CNN on TensorFlow 本文大部分内容均参考于: An Intuitive Explanation o...
    _Randolph_阅读 7,631评论 2 31
  • 介绍 先前的教程展示了一个简单的线性模型,对MNIST数据集中手写数字的识别率达到了91%。 在这个教程中,我们会...
    Kimichen7764阅读 1,604评论 0 7
  • 卷积神经网络是基于人工神经网络的深度机器学习方法,成功应用于图像识别领域。CNN采用了局部连接和权值共享,保持了网...
    dopami阅读 997评论 0 0
  • 今天和大家一起来看下基于TensorFlow实现CNN的代码示例,源码参见Convolutional_netWor...
    Jerry_wl阅读 1,411评论 0 2
  • 有个作者群,里面都是热爱写作的人,没有大神。群里讨论的主题一直都是技术类,现在的读者喜欢什么,什么样的题材能上首页...
    Jenny乔阅读 224评论 0 1