标准
TOP5
MNIST-FullConnected
分为三个文件
mnist_fc_inference.py
:定义了前向传播的过程以及神经网络中的参数。mnist_fc_train.py
:定义了神经网络的训练过程。mnist_fc_eval.py
:定义了测试过程。
最高98.62%
MNIST-LeNet5
lenet5_inference.py
卷积层的weights变量为四维矩阵,前面两维代表了过滤器的尺寸,第三个维度表示当前层的深度,第四个维度表示过滤器的深度。
卷积层的biases变量为一维向量,维度为过滤器的深度,即下一层节点矩阵的深度。
卷积层的Wx+b运算如下:先计算节点矩阵中某一块区域和一个过滤器的点积,然后加上这个过滤器的偏置。所以卷积层的参数个数为(SAME
全零填充):(过滤器长×过滤器宽×当前层深度×过滤器深度)+过滤器深度(biases)
,下一层的节点数为当前层长×当前层宽×过滤器深度
。
tf.nn.conv2d
函数实现了卷积算法,第一个参数为当前层的节点矩阵,这个节点矩阵为四维矩阵,第一个维度代表图像id,后三个维度代表节点矩阵(长宽深);第二个参数是卷积层的权重变量;第三个参数是不同维度上的步长,虽然第三个参数提供了长度为4的数组,但是第一维(id)和最后一维(图像深度)数字要求一定是1,这是因为卷积层的步长只对矩阵的长和宽有效。最后一个参数为填充(padding)方法,有2中选择:SAME
和VALID
,前者为全0填充,输出图像和输入图像长宽相同,后者为不填充,图像会有缩小。
tf.nn.bias_add
函数使得给每一个计算后的点积都加上偏置项。官网教程中无此函数,直接使用的加法。
池化层中的tf.nn.max_pool
参数与conv2d相似,ksize提供了过滤器的大小,strides提供了池化的步长,同样第一位和最后一维必须为1,第二和第三为长和宽。
lenet5_train.py
lenet5_eval.py
验证集98.84%
Inception-v3
将用不同边长的过滤器通过全0填充的卷积层的卷局函数叠在一起。
Tensorflow-Slim(TODO)
迁移学习
数据下载地址flower_photos.tgz
5个子文件夹,每个文件夹代表1个花种,平均一种花有734张图像。RGB色彩,大小不相同。
google训练好的Inception-v3模型inception_dec_2015.zip
处理压缩包
1 | tar xzf flower_photos.tgz |
代码
1 | # -*- coding: utf-8 -*- |
输出
1 | Step 0: Validation accuracy on random sampled 100 examples = 59.0% |