下面是padding的值SAME和VALID的差别(filter的宽度为6,stride为5),SAME确保所有图像信息都被convolve添加zero padding,而VALID只添加包含在内的像素点
比拟于传统的全连接层,卷积层只是部分连接,节俭了很多内存。
比如:一个具有5*5大年夜小filter的卷积层,输出200张150*100大年夜小的feature maps,stride取1(即不跳跃),padding为SAME。输入是150*100大年夜小的RGB图像(channel=3),总共的参数个数是200*(5*5*3+1)=15200,个中+1是bias;如不雅输出采取32-bits float表示(np.float32),那么每张图片会占据200*150*100*32=9600000bits(11.4MB),如不雅一个training batch包含100张图片(mini-batch=100),那么这一层卷积层就会占据1GB的RAM。
可以看出,练习卷积神经收集是异常消费内存的,然则应用时,只用到最后一层的输出即可。
二、Pooling Layer池化层
1、道理和参数
当图片大年夜小很大年夜时内存消费巨大年夜,而Pooling Layer所起的感化是浓缩效不雅,缓解内存压力。
即拔取必定大年夜小区域,将该区域用一个代表元素表示。具体的Pooling有两种,取平均值(mean)和取最大年夜值(max)。如下图所示是一个取最大年夜值的pooling layer,kernel大年夜小为2*2,stride大年夜小取决于kernel大年夜小,这里是2,即刚好使得所有kernel都不重叠的值,因而实现高效的信息紧缩,将原始图像横纵紧缩一半,如右图所示,特点根本都完全保存了下来。
2、TensorFlow实现
- # Create a graph with input X plus a max pooling layer
- X = tf.placeholder(tf.float32, shape=(None, height, width, channels))
- # 选用取最大年夜值的max_pool办法
- # 如不雅是取平均值,这里是mean_pool
- # ksize就是kernel大年夜小,feature map和channel都是1,横向纵向是2
- max_pool = tf.nn.max_pool(X, ksize=[1,2,2,1], strides=[1,2,2,1],padding=
推荐阅读
单车的应用频率越高共享的效不雅越好。大年夜摩拜单车的数据看,在流动的单车中,5次以下占据了60%阁下的出行。但1次、2次的也占据了30%阁下的份额,解释摩拜单车的应用率也不是很高。 开辟者大年夜赛路>>>详细阅读
本文标题:「机器学习」彻底搞懂CNN
地址:http://www.17bianji.com/lsqh/39483.html
1/2 1