首先本周没有完成用神经网络训练手写体数字识别的实例,下一周继续研究,并在本篇文章结尾继续更新。
目录:
1.使用Softmax Regressions完成手写体数字识别
2.利用神经网络训练手写体数字识别的必备知识
3.利用神经网络训练手写体数字识别
第一、使用Softmax Regressions完成手写体数字识别
其实学习TensorFlow的MNIST实验就相当于在学习C语言中打印出“Hello world!”。在MNIST For ML Beginners中官方指南给出了详细的说明并提供了实现Code,我按照其提供的Code运行结果为0.9714,还有很大的提升空间。
第二、利用神经网络训练手写体数字识别的必备知识
所需的必备知识有卷积、池化、全连接、Dropout、激励函数、CNN神经网络层次分析。
第三、利用神经网络训练手写体数字识别
参见训练代码,其中使用到了:
1.InteractiveSession类,这能让你在构建代码时更加灵活,允许你做一些交互操作,通过创建一个计算流图(computation graph)来部分地运行图计算。
2.tf.nn.conv2d(x, W,strides=[1,1,1,1],padding='SAME'),计算卷积的方法,tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)
除去name参数用以指定该操作的name,与方法有关的一共五个参数:
第一个参数input:指需要做卷积的输入图像,它要求是一个Tensor,具有[batch, in_height, in_width, in_channels]这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数],注意这是一个4维的Tensor,要求类型为float32和float64其中之一
第二个参数filter:相当于CNN中的卷积核,它要求是一个Tensor,具有[filter_height, filter_width, in_channels, out_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数],要求类型与参数input相同,filter的通道数要求与input的in_channels一致,有一个地方需要注意,第三维in_channels,就是参数input的第四维
第三个参数strides:卷积时在图像每一维的步长,这是一个一维的向量,长度4,strides[0]=strides[3]=1
第四个参数padding:string类型的量,只能是"SAME"(),"VALID"其中之一,这个值决定了不同的卷积方式
第五个参数:use_cudnn_on_gpu:bool类型,是否使用cudnn加速,默认为true
结果返回一个Tensor,这个输出,就是我们常说的feature map
2.tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME'),采用最大池化的方法,减少数据量,提高计算速度。
3.weight_variable([7*7*64,1024]),全连接层,图像的尺寸被缩减为7 * 7,我们最后加入一个神经元数目为1024的全连接层来处理所有的图像上。
4.tf.nn.dropout(h_fc1, keep_prob),为了减少过拟合程度,在输出层之前应用dropout技术(即丢弃某些神经元的输出结果)。
网友评论