天池新手赛——街景字符编码识别(三)

天池新手赛——街景字符编码识别(三)

Task 3 字符识别模型

基于CNN的图像分类网络

基于卷积神经网络的图像分类的发展经历了LeNet、AlexNet、VGG-16、InceptionV3、ResNet
AlexNet:
1.网络更深
2.引入Relu激活层
3.在全连接层引入dropout防止过拟合
4.LRN(局部响应归一化)

VGG-16
1.使用了更小的滤波器,更深的网络结构
2.小的卷积核与大的卷积核的感受野是相同的,还能减少参数,因而可以有更深的网络
3.使用batch normalization

Inception V3
1.在增加网络深度的同时,减少参数量
2.多尺寸卷积聚合(四通道)
2.使用11卷积核调节参数,降维,降低了计算复杂度
3.采用1
n n1的卷积核代替nn的卷积核,在不改变感受野的同时减少参数

ResNet
1.ResNet最大的贡献在于解决了深层网络难以训练的问题(反向传播梯度弥散)
2.跳跃连接
ResNet网络之所以能够训练下去主要得益于residual block(残差模块)的使用。
残差模块是一种短路连接,加了一条短路路径,使得前面的输入可以直接连接到输出。原本图中几层要学习的是H(x),现在由于多加了输入x的影响,网络层需要拟合的变成了F(x) = H(x) - x

Pytorch 构建CNN模型

torch.nn包括nn.Parameter nn.Module nn.functional nn.init

nn.module构建方式包括nn.Sequetial nn.Modulelist
nn.ModuleList
模型的构建包括构建子模块 _ init _()
拼接子模块 forward()

class SVHN_Model1(nn.Module):
    def __init__(self):
        super(SVHN_Model1, self).__init__()
                
        model_conv = models.resnet18(pretrained=True)
        model_conv.avgpool = nn.AdaptiveAvgPool2d(1)
        model_conv = nn.Sequential(*list(model_conv.children())[:-1])
        self.cnn = model_conv
        
        self.fc1 = nn.Linear(512, 11)
        self.fc2 = nn.Linear(512, 11)
        self.fc3 = nn.Linear(512, 11)
        self.fc4 = nn.Linear(512, 11)
        self.fc5 = nn.Linear(512, 11)
    
    def forward(self, img):        
        feat = self.cnn(img)
        # print(feat.shape)
        feat = feat.view(feat.shape[0], -1)
        c1 = self.fc1(feat)
        c2 = self.fc2(feat)
        c3 = self.fc3(feat)
        c4 = self.fc4(feat)
        c5 = self.fc5(feat)
        return c1, c2, c3, c4, c5

你可能感兴趣的:(天池新手赛——街景字符编码识别(三))