SVHN是对数据预处理和形式要求最小的现实图像集。和MNIST相似,但插入更多有标签数据并且来自1个更加困难,未解决的现实问题(识别自然场景图像中的数字)。SHVN来自谷歌街景图片[1]。
a. 10类:每类为1个数字,数字1有标签1,数字9有标签9,数字0有标签10。
b. 73257幅图像用于训练,26032幅图像用于测试,531131幅图像是额外的较容易的样本用来额外的训练数据。
c. 来自两种形式:带数字边框的原始图像;大小为32*32的单个字母位于中心的类似于MNIST的图像。
类似MNIST。所有的数字都固定为大小为32*32的图片。加载.mat文件会创建两个变量:
X——包含图像的4D矩阵;
y——类标签的矢量。
X(:,:,:,i)获取第i张大小为32*32的RGB图像,标签为y(i)。
输入有3个特征图。通常所有nn.Spatial*层都作用在3D数组上,第1维是不同特征(归一化后YUV通道)的索引,并且后面2维是图像/地图的宽度和高度的索引。
第1层应用16个滤波器至输入图(在不同层间随机选择),每个滤波器的大小为5x5。第1层产生的输出图大小为16x28x28。线性变换后紧跟非线性(tanh)和1个L2池化函数,池化区域大小为2x2且池化步长为2x2。操作的结果是产生1个16x14x14的数组,这个数组代表1个16维特征向量的14*14图。每个单元的感受野为7x7。
nfeats为特征的数目,nstates为滤波器的数目,fanin为扇入数目(第1层随机连接表的输入数目为3,输出数目为16,扇入数目为1)。根据随机连接表(Random Connection Table)的函数定义[2]知这里第1层的连接表包含nin(3)个输入图和nout(16)个输出图,每个输出图都有nto(1)个输入图连接。
第2层和第1层非常相似,但现在是16维的特征图映射到256维的特征图,采用全连接(这里原文说的是全连接,但它用的还是随机连接表,输入数目为16,输出数目为256,每个输出会从16个输入中随机选出4个和它连接,想象不出跟全连接有什么关系,不过下一层是全连接层):输出数组的每个单元受前一层的每个4*5*5的特征区域的影响(每个连接表)。该层因此有4*256*5*5个可训练的核权重(外加256个偏置)。第2层输出(卷积+池化)数组的大小为256x5x5。
第2层的5x5大小的256维特征图展平成1个6400维的向量,然后传给后面的两层神经网络。最后预测值(类间的10维分布)受32x32大小的输入变量(YUV像素)影响。
最近的工作(Jarret等)展示了在模型每层都对内部特征局部归一化的优点。对实例用更加平滑的池化函数(L2正则而不是最大池化。注:这个观点和Stanford计算机视觉组对池化效果总结出的观点是不同的。)能够更好地泛化(Sermanet等)。
另外,在内部层用全连接层显然不是好主意。通常,连接密度上倾向用大量特征(过完备)有助于实现更好的结果(Hedsell等)。SpatialConvolutionMap模块可以创建两层间的任意稀疏连接,见nn.tables[2]。
[1] http://ufldl.stanford.edu/housenumbers/
[2] http://nn.readthedocs.org/en/rtd/convolution/#nn.tables.full
[3] http://code.madbits.com/wiki/doku.php?id=tutorial_supervised_2_model
[4] http://code.madbits.com/wiki/doku.php?id=tutorial_supervised_3_loss
[5] http://code.madbits.com/wiki/doku.php?id=tutorial_supervised_a_tips