卷积神经网络快速入门【基于TensorFlow】
一.概述
卷积神经网络【Convolutional neural networks】里面最重要的构建单元是卷积层。神经元在第一个卷积层不是连接输入图片的每一个像素,只是连接它们感受野1的像素,以此类推,第二个卷积层的每一个神经元仅连接位于第一个卷积层的一个小方格的神经元。
感受野
卷积层
由此牵扯出感受野的定义,感受野是指在视通路2上各层次的神经细胞,有简单到复杂,它们所处理的信息,分别对应于视网膜上的一个局部区域,层次越深入,该区域就越大。卷积神经网络就是模仿生理学视觉的这个特点,通过多层卷积层,逐步深入。具体细节请看上图!
对于什么是视通路,生理学上讲指的是物体在可见光的照射下经眼睛的光学系统在眼底视网膜上形成物像,视网膜上的感光细胞又将视网膜上接收的光能转换为神经冲动,经过视交叉部分地交换神经纤维后,形成视束,传到中枢神经系统,包括丘脑的外膝体,上丘和视皮层。经过这个流程,人就能看见物体,这整个流程就是视通路。具体细节请看上图!
因此,整个卷积神经网络就是模仿眼睛的机理,通过逐层处理,提取特征,最后形成对物体整体的描述。
二.代码实现
1 # -*- coding: utf-8 -*- 2 """ 3 Created on Wed Nov 7 15:45:53 2018 4 @author: zhen 5 """ 6 7 import numpy as np 8 from sklearn.datasets import load_sample_images 9 import tensorflow as tf 10 import matplotlib.pyplot as plt 11 12 # 加载数据集 13 dataset = np.array(load_sample_images().images, dtype=np.float32) 14 batch_size, height, width, channels = dataset.shape 15 16 filters_test = np.zeros(shape=(7, 7, channels, 2), dtype=np.float32) 17 filters_test[:, 3, :, 0] = 1 # 垂直 18 filters_test[3, :, :, 1] = 1 # 水平 19 20 x = tf.placeholder(tf.float32, shape=(None, height, width, channels)) 21 # 卷积 22 convolution = tf.nn.conv2d(x, filter=filters_test, strides=[1, 2, 2, 1], padding=\'SAME\') 23 # pooling 24 max_pool = tf.nn.max_pool(x, ksize=[1, 4, 4, 1], strides=[1, 4, 4, 1], padding=\'VALID\') 25 26 with tf.Session() as sess: 27 convolution_output = sess.run(convolution, feed_dict={x:dataset}) 28 max_pool_output = sess.run(max_pool, feed_dict={x:dataset}) 29 30 plt.imshow(convolution_output[0, :, :, 0]) # 绘制特征图 31 plt.show() 32 plt.imshow(max_pool_output[0].astype(np.uint8)) # 绘制特征图 33 plt.show()
三.执行结果