基于Python的卷积神经网络三大模型介绍

2023-08-1719:29:52人工智能与大数据Comments954 views字数 4634阅读模式

卷积神经网络(Convolutional Neural Network,「CNN」)是一种前馈神经网络,常用于处理具有类似网格结构的数据,如图像。CNN 在图像识别、语音识别等领域取得了很大的成功。CNN 的核心是卷积层、池化层和全连接层。下面我们将介绍 CNN 的三大模型:LeNet、AlexNet 和 VGGNet。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/53872.html

LeNet

LeNet 是最早的卷积神经网络之一,由 Yann LeCun 在 1998 年提出。LeNet 主要用于手写数字识别,包含两个卷积层和三个全连接层。下面是 LeNet 的代码实现:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/53872.html


import torch.nn as nn

class LeNet(nn.Module):
    def __init__(self):
        super(LeNet, self).__init__()
        self.conv1 = nn.Conv2d(1, 6, 5)
        self.pool1 = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.pool2 = nn.MaxPool2d(2, 2)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        x = self.pool1(nn.functional.relu(self.conv1(x)))
        x = self.pool2(nn.functional.relu(self.conv2(x)))
        x = x.view(-1, 16 * 5 * 5)
        x = nn.functional.relu(self.fc1(x))
        x = nn.functional.relu(self.fc2(x))
        x = self.fc3(x)
        return x

AlexNet

AlexNet 是在 2012 年 ImageNet 比赛中获胜的卷积神经网络,由 Alex Krizhevsky 等人提出。AlexNet 包含五个卷积层和三个全连接层。下面是 AlexNet 的代码实现:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/53872.html


import torch.nn as nn

class AlexNet(nn.Module):
    def __init__(self):
        super(AlexNet, self).__init__()
        self.conv1 = nn.Conv2d(3, 96, 11, stride=4)
        self.pool1 = nn.MaxPool2d(3, stride=2)
        self.conv2 = nn.Conv2d(96, 256, 5, padding=2)
        self.pool2 = nn.MaxPool2d(3, stride=2)
        self.conv3 = nn.Conv2d(256, 384, 3, padding=1)
        self.conv4 = nn.Conv2d(384, 384, 3, padding=1)
        self.conv5 = nn.Conv2d(384, 256, 3, padding=1)
        self.pool3 = nn.MaxPool2d(3, stride=2)
        self.fc1 = nn.Linear(256 * 6 * 6, 4096)
        self.fc2 = nn.Linear(4096, 4096)
        self.fc3 = nn.Linear(4096, 1000)

    def forward(self, x):
        x = self.pool1(nn.functional.relu(self.conv1(x)))
        x = self.pool2(nn.functional.relu(self.conv2(x)))
        x = nn.functional.relu(self.conv3(x))
        x = nn.functional.relu(self.conv4(x))
        x = self.pool3(nn.functional.relu(self.conv5(x)))
        x = x.view(-1, 256 * 6 * 6)
        x = nn.functional.relu(self.fc1(x))
        x = nn.functional.relu(self.fc2(x))
        x = self.fc3(x)
        return x

VGGNet

VGGNet 是由 Karen Simonyan 和 Andrew Zisserman 在 2014 年提出的卷积神经网络,其特点是使用了很小的卷积核(3x3)和很深的网络结构。VGGNet 包含 16 个卷积层和 3 个全连接层。下面是 VGGNet 的代码实现:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/53872.html

import torch.nn as nn

class VGGNet(nn.Module):
    def __init__(self):
        super(VGGNet, self).__init__()
        self.conv1 = nn.Conv2d(3, 64, 3, padding=1)
        self.conv2 = nn.Conv2d(64, 64, 3, padding=1)
        self.pool1 = nn.MaxPool2d(2, stride=2)
        self.conv3 = nn.Conv2d(64, 128, 3, padding=1)
        self.conv4 = nn.Conv2d(128, 128, 3, padding=1)
        self.pool2 = nn.MaxPool2d(2, stride=2)
        self.conv5 = nn.Conv2d(128, 256, 3, padding=1)
        self.conv6 = nn.Conv2d(256, 256, 3, padding=1)
        self.conv7 = nn.Conv2d(256, 256, 3, padding=1)
        self.pool3 = nn.MaxPool2d(2, stride=2)
        self.conv8 = nn.Conv2d(256, 512, 3, padding=1)
        self.conv9 = nn.Conv2d(512, 512, 3, padding=1)
        self.conv10 = nn.Conv2d(512, 512, 3, padding=1)
        self.pool4 = nn.MaxPool2d(2, stride=2)
        self.conv11 = nn.Conv2d(512, 512, 3, padding=1)
        self.conv12 = nn.Conv2d(512, 512, 3, padding=1)
        self.conv13 = nn.Conv2d(512, 512, 3, padding=1)
        self.pool5 = nn.MaxPool2d(2, stride=2)
        self.fc1 = nn.Linear(512 * 7 * 7, 4096)
        self.fc2 = nn.Linear(4096, 4096)
        self.fc3 = nn.Linear(4096, 1000)

    def forward(self, x):
        x = nn.functional.relu(self.conv1(x))
        x = nn.functional.relu(self.conv2(x))
        x = self.pool1(x)
        x = nn.functional.relu(self.conv3(x))
        x = nn.functional.relu(self.conv4(x))
        x = self.pool2(x)
        x = nn.functional.relu(self.conv5(x))
        x = nn.functional.relu(self.conv6(x))
        x = nn.functional.relu(self.conv7(x))
        x = self.pool3(x)
        x = nn.functional.relu(self.conv8(x))
        x = nn.functional.relu(self.conv9(x))
        x = nn.functional.relu(self.conv10(x))
        x = self.pool4(x)
        x = nn.functional.relu(self.conv11(x))
        x = nn.functional.relu(self.conv12(x))
        x = nn.functional.relu(self.conv13(x))
        x = self.pool5(x)
        x = x.view(-1, 512 * 7 * 7)
        x = nn.functional.relu(self.fc1(x))
        x = nn.functional.relu(self.fc2(x))
        x = self.fc3(x)
        return x

三大模型评价

  • LeNet是一个非常经典的卷积神经网络模型,它在手写数字识别等任务上表现出色。它的网络结构相对简单,但是在当时的计算机性能下已经能够取得不错的表现。
  • AlexNet是第一个在ImageNet数据集上取得显著成果的卷积神经网络模型,它的深度和规模都超过了以往的模型。AlexNet的网络结构比LeNet更加复杂,包含了多个卷积层和全连接层。
  • VGG则是一个非常深的卷积神经网络模型,它的网络结构非常简单,但是在ImageNet数据集上取得了非常好的表现。VGG的网络结构非常规整,每个卷积层都使用了相同的卷积核大小和步长,这种结构使得VGG非常易于理解和实现。

「总的来说,这三个模型都是非常重要的卷积神经网络模型,它们的出现推动了卷积神经网络的发展,为后来的深度学习模型奠定了基础。」文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/53872.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ai/53872.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定