本文重点
前面的一篇文章我们学习了使用pytorch搭建卷积神经网络,本文我们使用刚刚搭建的卷积神经网络完成手写字体识别的任务
手写字体识别是之前进行介绍过的常用的数据集了,然后卷积神经网络如何搭建前面已经进行介绍了,下面我们将再详细的介绍一下如何使用卷积神经网络完成手写字体识别。
算法模型
class CNN(nn.Module):
def __init__(self):
super(CNN,self).__init__()
self.layer1=nn.Sequential( nn.Conv2d(1,16,kernel_size=3), nn.BatchNorm2d(16), nn.ReLU(inplace=True), ) self.layer2=nn.Sequential( nn.Conv2d(16,32,kernel_size=3), nn.BatchNorm2d(32), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=2,stride=2) )
self.layer3=nn.Sequential( nn.Conv2d(32,64,kernel_size=3), nn.BatchNorm2d(64), nn.ReLU(inplace=True) ) self.layer4=nn.Sequential( nn.Conv2d(64,128,kernel_size=3), nn.BatchNorm2d(128), nn.ReLU(inplace=True), nn.MaxPool2d(kernel_size=2,stride=2) )
self.fc=nn.Sequential( nn.Linear(128*4*4,1024), nn.ReLU(inplace=True), nn.Linear(1024,128), nn.ReLU(inplace=True), nn.Linear(128,10) )
def forward(self,x):
x=self.layer1(x)
x=self.layer2(x)
x=self.layer3(x)
x=self.layer4(x)
in_put=x.view(x.size(0),-1)
out_put=self.fc(in_put)
return out_put
跑模型
由于今日头条没有办法格式化的显示代码,所以这里只能贴上图片的代码形式了,整个代码分为四个部分,第一个部分是数据集的加载和预处理,这个进行了简单的数据预处理操作,和之前的一样,然后搭建了一个简单的卷积神经网络,这个卷积神经网络也没有什么复杂的,然后完成卷积神经网络的训练和测试,这些代码都经过了实地的训练和测试,均可用,如果需要代码的可以私信我获取。
搭建神经网络的时候,很多时候需要注意维度问题,下面我们看看卷积神经网络的维度问题,这里进行一下详细的分析。
卷积神经网络的维度信息
我们前面应该还记得,如果我们使用全连接神经网络接收图片的时候,我们需要将图片view,这是因为全连接神经网络接收(batch,全连接神经网络的输出层),从上面我们也可以看到,我们再卷积神经网络中也进行了类似的处理