强化学习神经网络学习-MNIST手写字符集识别

强化学习神经网络学习-MNIST手写字符集识别

现在仅仅停留在看懂代码以及卷积神经网络的学习过程,这是新手菜鸟学习笔记,主要参考的是,matlab代码过程(一次写不完 慢慢更新)

MNIST手写字符集的提取

识别的手写字符集为MNIST字符集,我们首先需要将所有的手写字符集提取。提取过程中需要注意的是,手写字符集的前16字节为其控制信息,分别为4字节的幻数,4字节的图像数,4字节的行数以及4个字节的列数。读取手写字符集时,先读取其不同的控制号

magic = fread(fp, 1, 'int32', 0, 'ieee-be'); %读幻数
numImages = fread(fp, 1, 'int32', 0, 'ieee-be'); %读图像数
numRows = fread(fp, 1, 'int32', 0, 'ieee-be'); %读行号
numCols = fread(fp, 1, 'int32', 0, 'ieee-be'); %读列号

读取完控制号可以进行后续的图像向量的读取(列向量形式)并将读取结果首先存储为三维向量的形式(图像数x行x列,10000x28x28),而后通过压缩将其压缩成为二维向量图像数x行列,100000x784),存储后其行号代表图像号,列号即为图像数据,可通过reshape函数还原成为2828的形式。
同理,对于手写字符集的标签的读取与上述相同,标签只包含4个控制字节,并且可以直接存储为一个单独向量,与图像读入的格式相同

图像数据预处理

Step1 Gabor滤波

在图像处理中,Gabor函数是一个用于边缘提取的线性滤波器。Gabor滤波器的频率和方向表达同人类视觉系统类似。在空间域中,一个二维Gabor滤波器是一个由正弦平面波调制的高斯核函数。对于图像Gabor滤波,首先设置滤波器的数量,在图像处理中滤波器的数量需要根据图像的特征得到。为了得到图像不同的滤波特点,需要对gabor滤波器设置不同的方向并且设置不同的滤波尺度。滤波方向就是gabor滤波公式中的θ角度设置(代码中采用了16个滤波角度),滤波尺度就是用来当作卷积核的滤波器的尺寸大小(代码中采用了11个滤波尺寸,分别为7,9,11,13,15…27,小于图像尺寸的28),并且确定在gabor滤波中所需要的波长,带宽,相位偏移(代码中动态改变,增加滤波器多样性)。滤波器尺度就是当前矩阵大小,对于其尺度中的每一个元素,均以下标带入公式计算:

y= exp( -(  (x*cos(theta)+y*sin(theta))^2  +  gamma^2*(-x*sin(theta)+y*cos(theta))^2  ) / (2*sigma^2) )...
    *cos( (2*pi/lambda) * (x*cos(theta)+y*sin(theta)) );

对于每一个滤波器完成计算后,按照矩阵的形式存储在cell数据结构中,行号表示该滤波器尺寸,列号表示该滤波器对应的角度

Step2 卷积

将构造的滤波器作为卷积核与每一张图像进行卷积,由于图像按照一维向量压缩存储,用reshape函数将图像还原成矩阵形式,使用conv2函数对图像按照不同的卷积核进行卷积,conv2函数卷积过程如下
将卷积核旋转180°,用旋转后的卷积核函数中心对准每一个图像数字,进行卷积操作(缺失数据的进行补0),并根据输入第三参数判断返回矩阵的规格。
上述卷积操作在卷积层中发生(L1层),并在卷积完成后返回一个四维特征向量L1[特征行号,特征列号,滤波器尺寸,滤波器方向],即为卷积后的平面图像特征。

Step3 池化

池化层减少卷积层的特征参数的维度和数量,采用最大池化,即缩小卷积层的特征数量(代码中以8为步长进行缩减),而后将每个图像的四维特征矩阵压缩成一维向量按序存储

强化学习(Reinforcment Learning)迭代策略

更新中~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值