人工智能基础部分10-卷积神经网络CNN初步认识

大家好,我是微学AI,今天给大家介绍一下卷积神经网络,卷积神经网络(Convolutional Neural Network)是一种深度学习模型,也是最近几年受到最多关注的模型之一。它的核心是深度学习的卷积层,可以帮助用户抽取有效的特征,从而进行分类或者识别。这些特征可以是图像,文本,音频或者视频中的相关特征,可以构建许多实用的应用。 

一、卷积神经网络的发展

CNN最早的模型框架就是由LeNet给出的, 即卷积+池化+FC层的基本结构.

2012年另一个具有划时代意义的模型AlexNet横空出世. AlexNet在2012年ImageNet竞赛中以超过第二名10.9个百分点的绝对优势, 一举夺冠, 引起了相当大的轰动. 此前深度学习沉寂了很久, 但自AlexNet诞生后, 所有的ImageNet冠军都是用CNN来做的.

随后,CNN 又经历了几次发展,例如 VGG、GoogLeNet 等。这些模型在不同的计算机视觉任务中取得了很好的成绩,并在深度学习领域引起了巨大的关注。

近年来,CNN 又有了新的发展,例如 ResNet、DenseNet 等。这些模型在不同的计算机视觉任务中也取得了很好的成绩。

总的来说,CNN 经历了几十年的发展,在计算机视觉领域取得了巨大的成就。它的出现极大地提高了计算机对图像的理解能力,为人工智能的发展做出了重要贡献。

二、卷积神经网络介绍
    卷积神经网络由一系列可学习的卷积层和全连接层组成,每一层都有一组可学习的参数,卷积层的参数定义为卷积核,全连接层的参数叫做权重矩阵。卷积神经网络可以通过反向传播算法不断的调整参数值,使得输入的数据可以被准确的识别或者分类。
   卷积神经网络的优势主要在于它可以抽取更多的特征,抽取特征的过程是由卷积层完成的,卷积层是基于局部连接和权重共享的。另外,卷积神经网络可以更好的处理结构化的输入数据,比如图片、声音、文本等。它也具有更少的参数,更高的泛化能力,这使得卷积神经网络更容易收敛,可以更快的训练模型,更好的处理大规模的数据,以及解决更复杂的问题。

三、卷积神经网络的原理

卷积神经网络(Convolutional Neural Network,CNN) 具有许多层,包括卷积层、池化层和全连接层。

卷积层的作用是提取图像的特征。它通过使用卷积核(也称为滤波器)对图像进行卷积来实现这一点。卷积核是一个小的矩阵,它在图像上滑动,并与图像的每个部分做卷积运算。对于图像的每一个位置,卷积核都会与它所覆盖的图像像素做内积,然后将所有内积的结果相加,得到一个新的值。这个新值就是卷积核在该位置的输出。卷积核在图像上滑动的过程就是卷积运算。

池化层的作用是降低图像的维度,同时保留有用的特征。常用的池化操作有最大池化和平均池化。最大池化会保留池化窗口内的最大值,而平均池化则会保留池化窗口内的平均值。池化的效果是降低图像的维度,同时有效地抑制噪声和缩小模型的大小。

全连接层是普通的神经网络层,它将之前的输出进一步处理并得到最终的输出结果。全连接层中的每个单元都会与前一层中的所有单元相连。

在训练过程中,CNN 会自动学习卷积核的权值,以便于提取图像中有用的特征。这就是 CNN 的强大之处,因为它能够自动学习图像的特征,而不用人工去设计特征提取方法。

四、卷积运算的数学表达

在物理学中,卷积运算可以用来描述两个时变信号之间的关系。例如,假设你有一个声音发生器和一个麦克风。当声音发生器发出声音时,麦克风就会捕捉到声音波。这个过程可以看作是声音发生器的输出信号与麦克风的输入信号之间的卷积运算。

在数学上,卷积运算可以表示为:

 (f*g)(x)=\int_{-\infty}^{\infty} f(\tau)g(x-\tau)d\tau

其中fg 是两个函数,* 表示卷积运算。

在上面的例子中,f 函数就是声音发生器的输出信号,g 函数就是麦克风的输入信号,(f*g)(x)就是麦克风捕捉到的声音信号。  

在 CNN 中,卷积运算通常是在二维图像上进行的。在二维图像中,卷积运算可以表示为:

 (f*g)(x,y)=\sum_{m=-\infty}^{\infty} \sum_{n=-\infty}^{\infty} f(m,n)g(x-m,y-n) 

其中 f是输入图像,g是卷积核,(x,y)是卷积核在图像上的位置。

在 CNN 中,卷积运算通常用于图像处理。例如,在图像分类任务中,我们可以使用卷积运算来提取图像中的特征。卷积核就是一个小的矩阵,它在图像上滑动,并与图像的每个部分做卷积运算。卷积核在图像上滑动的过程就是卷积运算。

五、卷积神经网络pytorch案例

import torchvision.transforms as transforms
from torch.nn import functional as F

# 定义模型
class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        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.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.view(-1, 16 * 5 * 5)
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

# 加载数据集
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])
trainset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=2)
testset = datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4, shuffle=False, num_workers=2)

net =CNN()
# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

if __name__ == '__main__':
    torch.multiprocessing.freeze_support()

    # 训练模型
    for epoch in range(5):  # 遍历数据集五次
        running_loss = 0.0
        for i, data in enumerate(trainloader, 0):
            # 获取输入和标签
            inputs, labels = data
            # 梯度清零
            optimizer.zero_grad()
            # 前向传播+反向传播+优化
            outputs= net(inputs)
            loss = criterion(outputs, labels)
            loss.backward()
            optimizer.step()
            # 打印统计信息
            running_loss += loss.item()
            if i % 2000 == 1999: # 每 2000 个 mini-batches 打印一次
                print('[%d, %5d] loss: %.3f' %
                (epoch + 1, i + 1, running_loss / 2000))
                running_loss = 0.0

                print('Finished Training')
    
    #模型测试
    correct = 0
    total = 0
    with torch.no_grad():
        for data in testloader:
            images, labels = data
            outputs = net(images)
            _, predicted = torch.max(outputs.data, 1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()

            print('Accuracy of the network on the 10000 test images: %d %%' % (
                    100 * correct / total))

 在未来,CNN 还将会有新的发展,并在更多领域得到应用。希望未来的发展能够帮助人工智能更好地服务于人类社会。

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
VGG-Net是一种经典的卷积神经网络模型,由牛津大学的研究团队开发。它在2014年的ImageNet图像分类挑战中取得了很好的成绩。VGG-Net的主要特点是使用了非常小的卷积核(3x3)和深层网络结构。 VGG-Net的网络结构非常简单,它由多个卷积层和池化层组成,最后接上全连接层进行分类。其中,卷积层使用了多个3x3的卷积核,通过堆叠多个卷积层来增加网络的深度。池化层则用于减小特征图的尺寸,同时保留主要特征。VGG-Net的网络结构非常深,有16层或19层,因此也被称为VGG16或VGG19。 相比于其他卷积神经网络模型,VGG-Net具有以下特点: 1. 网络结构简单明了,只使用了3x3的卷积核和池化层。 2. 拥有较深的网络结构,可以提取更复杂的特征。 3. 在ImageNet图像分类挑战中取得了较好的性能。 CNN卷积神经网络)是一种深度学习模型,广泛应用于图像识别、语音识别等领域。CNN的核心思想是通过卷积层、池化层和全连接层来提取和学习图像的特征。 CNN的卷积层通过卷积操作对输入图像进行特征提取,可以捕捉到图像的局部信息。池化层则用于减小特征图的尺寸,同时保留主要特征。最后,全连接层将提取到的特征映射到不同的类别上。 CNN的优势在于: 1. 具有局部感知性,能够有效地处理图像等二维数据。 2. 参数共享,减少了模型的参数量,降低了过拟合的风险。 3. 可以通过堆叠多个卷积层和池化层来构建深层网络,提取更高级的特征。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微学AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值