人工智能(Pytorch)搭建模型1-卷积神经网络实现简单图像分类

这篇具有很好参考价值的文章主要介绍了人工智能(Pytorch)搭建模型1-卷积神经网络实现简单图像分类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052

目录

一、Pytorch深度学习框架

二、卷积神经网络

三、代码实战

卷积神经网络进行分类的简单应用,(Pytorch)搭建模型,人工智能,pytorch,cnn,卷积层,池化层

内容:

一、Pytorch深度学习框架

PyTorch是一个开源的深度学习框架,它基于Torch进行了重新实现,主要支持GPU加速计算,同时也可以在CPU上运行。PyTorch框架提供了强大的自动求导功能,可以轻松地构建神经网络模型,并通过反向传播算法来优化模型的各种参数。

PyTorch框架特点:

动态图:PyTorch使用动态图来表示计算图,使得在定义模型时更加灵活自由,可以根据需要对模型进行修改和调整。

易于调试:PyTorch具有良好的调试工具,可以帮助开发者快速定位和解决问题。

易于使用:PyTorch的API设计简洁明了,使得使用起来非常方便快捷。

社区支持:PyTorch近几年特别热,它拥有庞大的社区支持,有海量的资料和教程可供参考,可以快速入门和解决问题。

卷积神经网络进行分类的简单应用,(Pytorch)搭建模型,人工智能,pytorch,cnn,卷积层,池化层

二、卷积神经网络

卷积神经网络(CNN)是一种深度学习模型,主要应用于图像识别、语音识别等领域。与传统的神经网络相比,CNN引入了卷积层和池化层,可以有效地减少模型参数,提高模型性能。

CNN的核心是卷积层,它通过卷积运算来提取输入特征的空间信息。卷积层包括多个卷积核,每个卷积核可以检测输入数据中的某个特定特征,并生成相应的输出特征图。卷积层的参数共享机制可以大大减少模型参数数量,降低过拟合的风险。

池化层用于进一步降低特征图的维度,同时也可以增强模型的鲁棒性。池化操作通常采用最大池化或平均池化,即对输入特征图中的每个子区域取最大值或平均值,生成新的特征图。

除了卷积层和池化层,CNN还包括全连接层和激活函数等组件,可以构建非常复杂的模型。CNN在图像处理任务中表现出色,它是计算机视觉领域的主流模型之一。

卷积神经网络进行分类的简单应用,(Pytorch)搭建模型,人工智能,pytorch,cnn,卷积层,池化层

卷积神经网络的基本层与原理:

卷积操作:卷积操作是卷积神经网络的核心操作之一,其目的是从输入数据中提取特征。卷积操作的本质是一种线性变换,它通过一个卷积核在输入数据上进行滑动,并计算每个位置上卷积核与输入数据的内积,得到一个新的特征图。卷积操作可以有效地减少需要学习的参数数量,并且具有平移不变性,即如果输入图像发生平移,提取出的特征不会发生改变。

池化操作:卷积操作得到的特征图通常比输入数据的尺寸大,为了减少特征图的尺寸,降低计算复杂度,我们通常会使用池化操作对特征图进行下采样。常见的池化操作包括最大池化、平均池化等,它们分别选取特定区域内的最大值或平均值作为该区域的输出,从而将特征图的尺寸降低。

激活函数:卷积神经网络通常在卷积和池化操作之后添加一个非线性激活函数,例如ReLU函数,以增强神经网络的表达能力。

全连接层:全连接层是卷积神经网络中的一种常用结构,它将卷积和池化得到的特征图映射到输出类别上。在全连接层中,每个节点都与前一层中的所有节点相连,因此需要学习的参数非常多,计算复杂度也较高。

Dropout层:Dropout操作是常用的正则化技术,可用于防止过拟合。它在训练时随机删除一部分神经元,使得每个神经元的输出不能依赖于其他神经元的存在,从而增加模型的泛化能力。

三、代码实战

下面我将用PyTorch框架搭载一个卷积神经网络模型,手把手教大家构建CNN网络,包括输入层,卷积层,池化层等。通过PyTorch搭建CNN进行图像分类,图像分类的数据集采用CIFAR10数据集,下面的简单易懂的代码部分:

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms

# 定义超参数
batch_size = 64
epochs = 10
learning_rate = 0.01

# 判断是否有可用的GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 定义数据增强方式
transform_train = transforms.Compose([
    transforms.RandomCrop(32, padding=4),
    transforms.RandomHorizontalFlip(),
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])

transform_test = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])

# 加载CIFAR10数据集
train_dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform_train)
test_dataset = datasets.CIFAR10(root='./data', train=False, download=True, transform=transform_test)

# 创建数据加载器
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=2)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=batch_size, shuffle=False, num_workers=2)


# 定义卷积神经网络模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 32, kernel_size=3, padding=1)
        self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)
        self.fc1 = nn.Linear(64 * 8 * 8, 512)
        self.fc2 = nn.Linear(512, 10)

    def forward(self, x):
        x = nn.functional.relu(self.conv1(x))
        x = nn.functional.max_pool2d(x, 2)
        x = nn.functional.relu(self.conv2(x))
        x = nn.functional.max_pool2d(x, 2)
        x = x.view(-1, 64 * 8 * 8)
        x = nn.functional.relu(self.fc1(x))
        x = self.fc2(x)
        return x


net = Net().to(device)

# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=learning_rate, momentum=0.9, weight_decay=5e-4)

if __name__=='__main__':
    # 训练模型
    for epoch in range(epochs):
        running_loss = 0.0
        for i, data in enumerate(train_loader, 0):
            inputs, labels = data[0].to(device), data[1].to(device)

            optimizer.zero_grad()

            outputs = net(inputs)
            loss = criterion(outputs, labels)
            loss.backward()
            optimizer.step()

            running_loss += loss.item()

            if i % 100 == 99:
                print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 100))
                running_loss = 0.0

    print('训练完成')

    # 评估模型性能并进行预测
    correct = 0
    total = 0
    with torch.no_grad():
        for data in test_loader:
            images, labels = data[0].to(device), data[1].to(device)
            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))

    classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

    class_correct = list(0. for i in range(10))
    class_total = list(0. for i in range(10))
    with torch.no_grad():
        for data in test_loader:
            images, labels = data[0].to(device), data[1].to(device)
            outputs = net(images)
            _, predicted = torch.max(outputs, 1)
            c = (predicted == labels).squeeze()
            for i in range(len(labels)):
                label = labels[i]
                class_correct[label] += c[i].item()
                class_total[label] += 1

    for i in range(10):
        print('Accuracy of %5s : %2d %%' % (
            classes[i], 100 * class_correct[i] / class_total[i]))

通过运行,可以得到几图片类别的识别结果。文章来源地址https://www.toymoban.com/news/detail-768364.html

到了这里,关于人工智能(Pytorch)搭建模型1-卷积神经网络实现简单图像分类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 人工智能(pytorch)搭建模型17-pytorch搭建ReitnNet模型,加载数据进行模型训练与预测

    大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型17-pytorch搭建ReitnNet模型,加载数据进行模型训练与预测,RetinaNet 是一种用于目标检测任务的深度学习模型,旨在解决目标检测中存在的困难样本和不平衡类别问题。它是基于单阶段检测器的一种改进方法,通

    2024年02月15日
    浏览(96)
  • 人工智能-卷积神经网络

            人和动物如何把看到的图像转化为大脑中的一个概念?         我们知道计算机是把图转换为一大堆数字,通过训练可以知道这堆数字代表什么含义。但通过前面学过神经网络模型和梯度下降法的方法训练费时费力,而且一旦图片进行改变如缩放、旋转或其他变换,

    2024年02月16日
    浏览(56)
  • 人工智能(pytorch)搭建模型12-pytorch搭建BiGRU模型,利用正态分布数据训练该模型

    大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型12-pytorch搭建BiGRU模型,利用正态分布数据训练该模型。本文将介绍一种基于PyTorch的BiGRU模型应用项目。我们将首先解释BiGRU模型的原理,然后使用PyTorch搭建模型,并提供模型代码和数据样例。接下来,我们将

    2024年02月09日
    浏览(68)
  • 人工智能(pytorch)搭建模型14-pytorch搭建Siamese Network模型(孪生网络),实现模型的训练与预测

    大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型14-pytorch搭建Siamese Network模型(孪生网络),实现模型的训练与预测。孪生网络是一种用于度量学习(Metric Learning)和比较学习(Comparison Learning)的深度神经网络模型。它主要用于学习将两个输入样本映射到一个

    2024年02月11日
    浏览(143)
  • 人工智能(pytorch)搭建模型13-pytorch搭建RBM(受限玻尔兹曼机)模型,调通模型的训练与测试

    大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型13-pytorch搭建RBM(受限玻尔兹曼机)模型,调通模型的训练与测试。RBM(受限玻尔兹曼机)可以在没有人工标注的情况下对数据进行学习。其原理类似于我们人类学习的过程,即通过观察、感知和记忆不同事物的特点

    2024年02月10日
    浏览(77)
  • 人工智能(pytorch)搭建模型8-利用pytorch搭建一个BiLSTM+CRF模型,实现简单的命名实体识别

    大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型8-利用pytorch搭建一个BiLSTM+CRF模型,实现简单的命名实体识别,BiLSTM+CRF 模型是一种常用的序列标注算法,可用于词性标注、分词、命名实体识别等任务。本文利用pytorch搭建一个BiLSTM+CRF模型,并给出数据样例,

    2024年02月09日
    浏览(63)
  • 人工智能(Pytorch)搭建模型2-LSTM网络实现简单案例

     本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052  大家好,我是微学AI,今天给大家介绍一下人工智能(Pytorch)搭建模型2-LSTM网络实现简单案例。主要分类三个方面进行描述:Pytorch搭建神经网络的简单步骤、LSTM网络介绍、Pytorch搭建LSTM网络的代码实战 目录

    2024年02月03日
    浏览(65)
  • 人工智能之卷积神经网络(CNN)

    前言:今天我们重点探讨一下卷积神经网络(CNN)算法。 _ 20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络CNN(Convolutional Neural Networks)。 1980年,K.Fukushima提

    2024年02月20日
    浏览(52)
  • 人工智能(pytorch)搭建模型11-pytorch搭建DCGAN模型,一种生成对抗网络GAN的变体实际应用

    大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型11-pytorch搭建DCGAN模型,一种生成对抗网络GAN的变体实际应用,本文将具体介绍DCGAN模型的原理,并使用PyTorch搭建一个简单的DCGAN模型。我们将提供模型代码,并使用一些数据样例进行训练和测试。最后,我们将

    2024年02月08日
    浏览(73)
  • 人工智能卷积神经网络,CNN,梯度下降

    CNN,是针对图像领域提出的神经网络。 得出的结论: 神经元存在局部感受区域,也称 感受野 细胞对角度有选择性 如细胞对垂直光条响应最强 细胞对运动方向有选择性 1.视觉系统是分层,分级处理的。从低到高堆叠使用卷积和池化。 2.神经系统是存在局部感受区域的。 第一

    2024年02月01日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包