CNN(卷积神经网络)卷积神经网络简单讲就是把一个图片的数据传递给CNN,原涂层是由RGB组成,然后CNN把它的厚度加厚,长宽变小,每做一层都这样被拉长,最后形成一个分类器
<强>在CNN中有几个重要的概念:强>
-
<李> 李>大步
<李>填充李>
<李>池李>
大步,就是每跨多少步抽取信息。每一块抽取一部分信息,长宽就缩减,但是厚度增加。抽取的各个小块儿,再把它们合并起来,就变成一个压缩后的立方体。
填充,抽取的方式有两种,一种是抽取后的长和宽缩减,另一种是抽取后的长和宽和原来的一样。
池、就是当跨步比较大的时候,它会漏掉一些重要的信息,为了解决这样的问题,就加上一层叫池、事先把这些必要的信息存储起来,然后再变成压缩后的层
利用tensorflow搭建CNN,也就是卷积神经网络是一件很简单的事情,笔者按照官方教程中使用MNIST手写数字识别为例展开代码,整个程序也基本与官方例程一致,不过在比较容易迷惑的地方加入了注释,有一定的机器学习或者卷积神经网络制式的人都应该可以迅速领会到代码的含义。
#=utf - 8编码 进口tensorflow特遣部队 进口numpy np 从tensorflow.examples.tutorials。mnist进口input_data mnist=input_data。read_data_sets (MNIST_data, one_hot=True) def weight_variable(形状): 初始=tf.truncated_normal(形状,stddev=0.1) #截断正态分布,此函数原型为尺寸,均值,标准差 返回tf.Variable(初始) def bias_variable(形状): 初始=tf.constant(0.1,形状=形状) 返回tf.Variable(初始) def conv2d (x, W): 返回tf.nn.conv2d (x, W,进步=(1,1,1,1),填充=跋嗤?#进步第0位和第3为一定为1,剩下的是卷积的横向和纵向步长 def max_pool_2x2 (x): tf.nn返回。max_pool (x, ksize=(1、2、2、1)进步=(1、2、2、1)填充=跋嗤?#参数同上,ksize是池化块的大小 x=特遣部队。占位符(“浮动”,形状=[没有,784) y_=特遣部队。占位符(“浮动”,形状=[没有10]) #图像转化为一个四维张量,第一个参数代表样本数量,1表示不定,第二三参数代表图像尺寸,最后一个参数代表图像通道数 x_image=tf.reshape (x,[1] 1, 28日,28日) #第一层卷积加池化 w_conv1=weight_variable([5、5、1、32]) #第一二参数值得卷积核尺寸大小,即补丁,第三个参数是图像通道数,第四个参数是卷积核的数目,代表会出现多少个卷积特征 b_conv1=bias_variable ([32]) h_conv1=tf.nn.relu (conv2d (x_image w_conv1) + b_conv1) h_pool1=max_pool_2x2 (h_conv1) #第二层卷积加池化 w_conv2=weight_variable([5 5 64]) #多通道卷积,卷积出64个特征 b_conv2=bias_variable ([64]) h_conv2=tf.nn.relu (conv2d (h_pool1 w_conv2) + b_conv2) h_pool2=max_pool_2x2 (h_conv2) #原图像尺寸28 * 28日第一轮图像缩小为14 * 14,共有32张,第二轮后图像缩小为7 * 7,共有64张 w_fc1=weight_variable ([7 * 7 * 64 1024]) b_fc1=bias_variable ([1024]) h_pool2_flat=tf.reshape (h_pool2[1, 7 * 7 * 64]) #展开,第一个参数为样本数量,1未知 f_fc1=tf.nn.relu (tf.matmul (h_pool2_flat w_fc1) + b_fc1) #辍学操作,减少过拟合 keep_prob=tf.placeholder (tf.float32) h_fc1_drop=tf.nn.dropout (f_fc1 keep_prob) w_fc2=weight_variable([10] 1024年) b_fc2=bias_variable ([10]) y_conv=tf.nn.softmax (tf.matmul (h_fc1_drop w_fc2) + b_fc2) * tf.log cross_entropy=-tf.reduce_sum (y_ (y_conv)) #定义交叉熵为损失函数 train_step=tf.train.AdamOptimizer(1)的军医.minimize (cross_entropy) #调用优化器优化 correct_prediction=tf.equal (tf.argmax (y_conv, 1), tf.argmax (y_ (1)) 精度=tf.reduce_mean (tf。铸造(correct_prediction“浮动”)) 税=tf.InteractiveSession () sess.run (tf.initialize_all_variables ()) 因为我在范围(2000): 批=mnist.train.next_batch (50) 如果我% 100==0: train_accuracy=准确性。eval (feed_dict={x:批处理[0],y_:批处理[1],keep_prob: 1.0}) % d打印”步骤,训练精度% g”%(我train_accuracy) train_step.run (feed_dict={x:批处理[0],y_:批处理[1],keep_prob: 0.5}) 打印“测试精度% g”%的准确性。eval (feed_dict={x: mnist.test。图像(0:500)y_: mnist.test。标签(0:500)keep_prob: 1.0})用tensorflow搭建CNN的方法