作家
登录

「机器学习」彻底搞懂CNN

作者: 来源: 2017-12-06 09:04:38 阅读 我要评论

Create 2 filters 
  •  
  • # 一般感触感染眼大年夜小7*7,5*5,3*3,设置2个kernel,输出2层feature map 
  •  
  • filters_test = np.zeros(shape=(7, 7, channels, 2), dtype=np.float32) 
  •  
  • # 第一个(0)filter的设定,7*7矩阵中,3是中心 
  •  
  • filters_test[:, 3, :, 0] = 1 # vertical line 
  •  
  • # 第二个(1)filter的设定 
  •  
  • filters_test[3, :, :, 1] = 1 # horizontal line 
  •  
  • # a graph with input X plus a convolutional layer applying the 2 filters 
  •  
  • X = tf.placeholder(tf.float32, shape=(None, height, width, channels)) 
  •  
  • # 固然输入是一个四维图像,然则因为batch_size和channel都已经固定,所以应用conv2d 
  •  
  • # strides设定,第一个和第四个都是1表示弗成以跳过batch_size和channel 
  •  
  • # 那两个2表示横纵向都缩减2,相当于整张图片缩减为本来四分之一,做了75%的缩减 
  •  
  • convolution = tf.nn.conv2d(X, filters, strides=[1,2,2,1], padding="SAME"
  •  
  • with tf.Session() as sess: 
  •  
  •     output = sess.run(convolution, feed_dict={X: dataset}) 
  • 下面是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实现

    1. Create a graph with input X plus a max pooling layer 
    2.  
    3. X = tf.placeholder(tf.float32, shape=(None, height, width, channels)) 
    4.  
    5. # 选用取最大年夜值的max_pool办法 
    6.  
    7. # 如不雅是取平均值,这里是mean_pool 
    8.  
    9. # ksize就是kernel大年夜小,feature map和channel都是1,横向纵向是2 
    10.  
    11. max_pool = tf.nn.max_pool(X, ksize=[1,2,2,1], strides=[1,2,2,1],padding=

        推荐阅读

        我是怎样爬下6万共享单车数据并进行分析的(附代码)

      单车的应用频率越高共享的效不雅越好。大年夜摩拜单车的数据看,在流动的单车中,5次以下占据了60%阁下的出行。但1次、2次的也占据了30%阁下的份额,解释摩拜单车的应用率也不是很高。 开辟者大年夜赛路>>>详细阅读


      本文标题:「机器学习」彻底搞懂CNN

      地址:http://www.17bianji.com/lsqh/39483.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)