【人工智能概论】 构建神经网络——以用InceptionNet解决MNIST任务为例

这篇具有很好参考价值的文章主要介绍了【人工智能概论】 构建神经网络——以用InceptionNet解决MNIST任务为例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【人工智能概论】 构建神经网络——以用InceptionNet解决MNIST任务为例


一. 整体思路

  • 两条原则,四个步骤。

1.1 两条原则

  1. 从宏观到微观
  2. 把握数据形状

1.2 四个步骤

  1. 准备数据
  2. 构建模型
  3. 确定优化策略
  4. 完善训练与测试代码

二. 举例——用InceptionNet解决MNIST任务

2.1 模型简介

  • InceptionNet的设计思路是通过增加网络宽度来获得更好的模型性能。
  • 其核心在于基本单元Inception结构块,如下图:
    【人工智能概论】 构建神经网络——以用InceptionNet解决MNIST任务为例
  • 通过纵向堆叠Inception块构建完整网络。

2.2 MNIST任务

  • MNIST是入门级的机器学习任务;
  • 它是一个手写数字识别的数据集。

2.3 完整的程序

# 调包
import torch
import torch.nn as nn
import torch.nn.functional as F
from torchvision import transforms
from torchvision import datasets
from torch.utils.data import DataLoader
import torch.optim as optim


"""数据准备"""
batch_size = 64

transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,),(0.3081,))
])

train_dataset = datasets.MNIST(root='./mnist/',train=True,download=True,transform=transform)
train_loader = DataLoader(train_dataset,shuffle=True,batch_size=batch_size)
test_dataset = datasets.MNIST(root='./mnist/',train=False,download=True,transform=transform)
test_loader = DataLoader(test_dataset,shuffle=False,batch_size=batch_size)


"""构建模型"""
# 需要指定输入的通道数

class Inceptiona(nn.Module): 
    def __init__(self,in_channels):
        super(Inceptiona,self).__init__()
        
        self.branch1_1 = nn.Conv2d(in_channels , 16 , kernel_size= 1)
        
        self.branch5_5_1 =nn.Conv2d(in_channels, 16, kernel_size= 1)
        self.branch5_5_2 =nn.Conv2d(16,24,kernel_size=5,padding=2)
        
        self.branch3_3_1 = nn.Conv2d(in_channels, 16,kernel_size=1)
        self.branch3_3_2 = nn.Conv2d(16,24,kernel_size=3,padding=1)
        self.branch3_3_3 = nn.Conv2d(24,24,kernel_size=3,padding=1)
        
        self.branch_pooling = nn.Conv2d(in_channels,24,kernel_size=1)
        
    def forward(self,x):
        x1 = self.branch1_1(x)
        
        x2 = self.branch5_5_1(x)
        x2 = self.branch5_5_2(x2)
        
        x3 = self.branch3_3_1(x)
        x3 = self.branch3_3_2(x3)
        x3 = self.branch3_3_3(x3)
        
        x4 = F.avg_pool2d(x,kernel_size=3,stride = 1, padding=1)
        x4 = self.branch_pooling(x4)
        
        outputs = [x1,x2,x3,x4]
        return torch.cat(outputs,dim=1)      
    
# 构建完整的网络
class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        self.conv1 = nn.Conv2d(1,10,kernel_size=5)
        self.conv2 = nn.Conv2d(88,20,kernel_size=5)
        
        self.incep1 = Inceptiona(in_channels=10)
        self.incep2 = Inceptiona(in_channels=20)
        
        self.mp = nn.MaxPool2d(2)
        self.fc = nn.Linear(1408,10)
        
    def forward(self,x):
        batch_size = x.size(0)
        x = F.relu(self.mp(self.conv1(x)))
        x = self.incep1(x)
        x = F.relu(self.mp(self.conv2(x)))
        x = self.incep2(x)
        
        x = x.view(batch_size,-1)
        x = self.fc(x)
        return x


"""确定优化策略"""
model = Net()
device = torch.device('cuda:0'if torch.cuda.is_available() else 'cpu')
model.to(device) # 指定设备

criterion = torch.nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(),lr=0.01,momentum=0.5)



"""完善训练与测试代码"""
def train(epoch):
    running_loss = 0.0
    for batch_index, data in enumerate(train_loader,0):
        inputs, target = data
        # 把数据和模型送到同一个设备上
        inputs, target = inputs.to(device), target.to(device)
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs,target)
        loss.backward()
        optimizer.step()
        
        running_loss += loss.item() 
        # 用loss.item不会构建计算图,得到的不是张量,而是标量
        if batch_index % 300 == 299:
            # 每三百组计算一次平均损失
            print('[%d,%5d] loss: %.3f' %(epoch+1,batch_index+1,running_loss/300))
            # 给出的是平均每一轮的损失
            running_loss = 0.0
            
def test():
    correct = 0
    total = 0
    with torch.no_grad(): 
        # 测试的环节不用求梯度
        for data in test_loader:
            images , labels = data
            images , labels = images.to(device),  labels.to(device)
            outputs = model(images)
            _, predicted = torch.max(outputs.data,dim=1)
            total += labels.size(0)
            correct += (predicted == labels).sum().item()
    print('accuracy on test set: %d,%%'%(100*correct/total))
    return 100*correct/total  # 将测试的准确率返回

# 执行训练
if __name__=='__main__':
    score_best = 0
    for epoch in range(10):
        train(epoch)
        score = test()
        if score > score_best:
            score_best = score
            torch.save(model.state_dict(), "model.pth")

文章来源地址https://www.toymoban.com/news/detail-419523.html

到了这里,关于【人工智能概论】 构建神经网络——以用InceptionNet解决MNIST任务为例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 人工智能 -- 神经网络

    什么是人工智能?通俗来讲,就是让机器能像人一样思考。这个无需解释太多,因为通过各种科幻电影我们已经对人工智能很熟悉了。大家现在感兴趣的应该是——如何实现人工智能? 从1956年夏季首次提出“人工智能”这一术语开始,科学家们尝试了各种方法来实现它。这

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

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

    2024年02月16日
    浏览(44)
  • 人工智能-线性神经网络

    线性神经网络 在介绍深度神经网络之前,我们需要了解神经网络训练的基础知识。 本章我们将介绍神经网络的整个训练过程, 包括:定义简单的神经网络架构、数据处理、指定损失函数和如何训练模型。 为了更容易学习,我们将从经典算法———— 线性 神经网络开始,介

    2024年02月06日
    浏览(42)
  • 人工智能神经网络概念股,神经网络芯片概念股

    人工智能包含硬件智能、软件智能和其他。 硬件智能包括:汉王科技、康力电梯、慈星股份、东方网力、高新兴、紫光股份。 软件智能包括:金自天正、科大讯飞。 其他类包括:中科曙光、京山轻机。 谷歌人工智能写作项目:小发猫 1、苏州科达:苏州科达科技股份有限公

    2024年02月07日
    浏览(43)
  • 【复习】人工智能 第 8 章 人工神经网络及其应用

    因为计算牵扯到导数,所以这章难的部分不会考太难。 人工神经网络是对人脑或生物神经网络若干基本特性的抽象和模拟。 深度学习是神经网络的发展。 人工智能曾经历过很长一段时间的停滞不前。 浩瀚的宇宙中,也许只有包含数千忆颗星球的银河系的复杂性能够与大脑相

    2024年01月19日
    浏览(45)
  • 人工智能之卷积神经网络(CNN)

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

    2024年02月20日
    浏览(41)
  • 神经网络与人工智能:未来的前沿

    人工智能(Artificial Intelligence, AI)是一门研究如何让机器具有智能行为的科学。在过去的几十年里,人工智能研究主要集中在规则-基于的系统、知识-基于的系统以及黑盒模型。然而,在过去的几年里,一种新的人工智能技术已经吸引了广泛的关注:神经网络。神经网络是一种模

    2024年02月21日
    浏览(50)
  • 【人工智能】— 深度神经网络、卷积神经网络(CNN)、多卷积核、全连接、池化

    Pre-training + Fine-tuning Pre-training(预训练) : 监督逐层训练是多隐层网络训练的有效手段, 每次训练一层隐层结点, 训练时将上一层隐层结点的输出作为输入, 而本层隐结点的输出作为下一层隐结点的输入, 这称为”预训练”. Fine-tuning(微调) : 在预训练全部完成后, 再对整个网络进行

    2024年02月10日
    浏览(41)
  • 人工智能:CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的知识梳理

    卷积神经网络(CNN),也被称为ConvNets或Convolutional Neural Networks,是一种深度学习神经网络架构,主要用于处理和分析具有网格状结构的数据,特别是图像和视频数据。CNN 在计算机视觉任务中表现出色,因为它们能够有效地捕获和识别图像中的特征,具有平移不变性(transla

    2024年02月05日
    浏览(55)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包