这是自己的第一篇博客,写的不好请见谅,就是想把自己这段时间所学的相关tensorflow的相关东西做个总结,帮助自己记忆,也希望能对别人有点帮助。
通过Tensorflow做的关于Mnist的数字识别,具体的完整流程请见极客网的流程。我只想记录一下自己的实现的CNN部分。
这一部分没什么要说的,导入Tensorflow
#coding=utf-8
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
用于对变量赋初值,为了避免0梯度问题,我们在设置偏置值时使用不为0的小常数,这里取0.1。在tensorflow中的constant用于指定常量值,0.1是常数的具体取值,shape是数据格式。当value = 1,shape=[1,2]时,[1,1]为初值结果。truncated_normal决定了产生的数据的随机模型
def weight_variable(shape):
initial = tf.truncated_normal(shape,stddev=0.1)
return tf.Variable(initial)
def bias_variable(shape):
initial = tf.constant(0.1,shape=shape)
# 0.1是常数的值,shape是数据格式
return tf.Variable(initial)
接下来是需要重点理解的部分,也是CNN的区别的地方,conv2d 和 pool。
卷积的本质是对原图片通过卷积层提取特征,我们不再需要对所有神经元关联而是仅对附近的神经元局部计算 (例如我们可以取一个5x5的块来提取),并且参数共享,这样就极大地简化了计算。我的代码中将strides定为1,表示位移的步长为1。
con2d有几个参数值,先说input是实际输入值