• AlexNet


    《ImageNet Classification with Deep Convolutional Neural Networks》
    2012年ISLVRC2012竞赛的冠军网络,由Hinton和他的学生Alex Krizhevsky设计。

    网络亮点:

    1. 首次利用GPU进行网络加速训练
    2. 使用了ReLU激活函数,而不是传统的Sigmoid激活函数以及Tanh激活函数。
    3. 使用了LRN局部响应归一化
    4. 在全连接层的前两层中使用了Dropout随机失活神经元操作,以减少过拟合。

    网络结构

    image
    这幅图分为上下两个部分的网络,论文中提到这两部分网络是分别对应两个GPU,只有到了特定的网络层后才需要两块GPU进行交互,这种设置完全是利用两块GPU来提高运算的效率,其实在网络结构上差异不是很大。
    image

    代码实现

    class AlexNet(nn.Module):
        def __init__(self, init_weights=False):
            super(AlexNet, self).__init__()
            self.conv1 = nn.Sequential(
                nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=2),
                nn.ReLU(inplace=True),
                nn.MaxPool2d(3, 2),
            )
            self.conv2 = nn.Sequential(
                nn.Conv2d(96, 256, kernel_size=5, padding=2),
                nn.ReLU(inplace=True),
                nn.MaxPool2d(3, 2),
            )
            self.conv3 = nn.Sequential(
                nn.Conv2d(256, 384, kernel_size=3, padding=1),
                nn.ReLU(inplace=True),
            )
            self.conv4 = nn.Sequential(
                nn.Conv2d(384, 384, kernel_size=3, padding=1),
                nn.ReLU(inplace=True),
            )
            self.conv5 = nn.Sequential(
                nn.Conv2d(384, 256, kernel_size=3, padding=1),
                nn.ReLU(inplace=True),
                nn.MaxPool2d(kernel_size=3, stride=2),
            )
    
            self.classifier = nn.Sequential(
                nn.Dropout(p=0.5),
                nn.Linear(128 * 6 * 6, 2048),
                nn.ReLU(inplace=True),
                nn.Dropout(p=0.5),
                nn.Linear(2048, 2048),
                nn.ReLU(inplace=True),
                nn.Linear(2048, 1000),
            )
    
        def forward(self, x):
            x = self.conv1(x)
            x = self.conv2(x)
            x = self.conv3(x)
            x = self.conv4(x)
            x = self.conv5(x)
    
            x = torch.flatten(x, start_dim=1)
            x = self.classifier(x)
            return x
    
  • 相关阅读:
    RN 各种小问题
    迷宫问题的求解(回溯法、深度优先遍历、广度优先遍历)
    java 对象的初始化流程(静态成员、静态代码块、普通代码块、构造方法)
    java四种访问权限
    八大排序之归并排序
    八大排序之堆排序
    八大排序之选择排序
    八大排序之快速排序
    Java动态代理和cglib动态代理
    类加载器 ClassLoder详解
  • 原文地址:https://www.cnblogs.com/mengting-123/p/14838910.html
Copyright © 2020-2023  润新知