IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 2021-09-26 -> 正文阅读

[人工智能]2021-09-26

构建神经网络步骤总结:
1、加载数据
使用的头文件:from torchvision import datasets, transforms
加载数据分为两部分:

  • 加载训练集
  • 加载测试集
    二者差别不大,唯一却别就是训练集要将训练参数为true,测试集为false;
batchsz=32
    cifar_train=datasets.CIFAR10('cifar',True,transform=transforms.Compose([
        transforms.Resize((32,32)),
        transforms.ToTensor()
    ]),download=True)
    #以上一次只能加载一张图片,使用多线程的操作来加载多张图片
    cifar_train=DataLoader(cifar_train,batch_size=batchsz,shuffle=True)
    cifar_test = datasets.CIFAR10('cifar', False, transform=transforms.Compose([
        transforms.Resize((32, 32)),
        transforms.ToTensor()
    ]), download=True)
    cifar_test = DataLoader(cifar_test, batch_size=batchsz, shuffle=True)

    #得到数据集的迭代器
    x,label=iter(cifar_train).__next__()
```python
在这里插入代码片


```python

为了可以加载多张图片,使用dataloader()多线程来加载多张图片

cifar_train=DataLoader(cifar_train,batch_size=batchsz,shuffle=True)
 
cifar_test = DataLoader(cifar_test, batch_size=batchsz, shuffle=True)

第二步:构建网络结构
暂时还不清楚怎么设计网络,目前能做的是看图说话:
接下来构建如下图网络:

神经网络图示
上图构建过程分为两步:

  • 卷积神经网络
  • 线性全连接层
    1、卷积神经网络构建:
self.conv_unit=nn.Sequential(
            #输入x:[b,3,32,32]
            nn.Conv2d(3,6,kernel_size=5,stride=1,padding=0),
            nn.AvgPool2d(kernel_size=2,stride=2,padding=0),
            nn.Conv2d(6,16,kernel_size=5,padding=0),
            nn.AvgPool2d(kernel_size=2,stride=2,padding=0)
            #为了和全连接相连,需要对数据进行打平

        )

全连接层构建过程:

self.fc_unit=nn.Sequential(
            #输入和输出,120为输出,暂时不知道多少,暂定120
            nn.Linear(16*5*5,120),
            nn.ReLU(),
            nn.Linear(120,84),
            nn.ReLU(),
            nn.Linear(84,10)
        )

随后将网络串联起来,调用forward()函数完成此效果,神经网络中forward()函数是必备的,可以说是神经网络使用说明书,通过随forward()的运行将网络结构串起来,另外也有backward()函数,但是一般不会初始化,可以直接调用,因为forward()存在,在运行的过程中,系统自动保存回溯轨迹;

    def forward(self,x):
        '''

        :param x: [b,3,32,32]
        :return:
        '''
        batchsz=x.size(0)
        #[b,3,32,32]==>[b,16,5,5]
        x=self.conv_unit(x)
        #[b,16,5,5]==>[b,16*5*5]
        x=x.view(batchsz,16*5*5)
        #[b,16*5*5]
        logits=self.fc_unit(x)
        #pred=F.softmax(logits,dim=1)
        return logits

整个网络代码:

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

class lenet5(nn.Module):
    def __init__(self):
        #子类把父类的__init__()放到自己的__init__()当中,
        # 这样子类就有了父类的__init__()的那些东西。
        #继承操作
        super(lenet5,self).__init__()
        self.conv_unit=nn.Sequential(
            #输入x:[b,3,32,32]
            nn.Conv2d(3,6,kernel_size=5,stride=1,padding=0),
            nn.AvgPool2d(kernel_size=2,stride=2,padding=0),
            nn.Conv2d(6,16,kernel_size=5,padding=0),
            nn.AvgPool2d(kernel_size=2,stride=2,padding=0)
            #为了和全连接相连,需要对数据进行打平

        )
        #flatten,展平
        self.fc_unit=nn.Sequential(
            #输入和输出,120为输出,暂时不知道多少,暂定120
            nn.Linear(16*5*5,120),
            nn.ReLU(),
            nn.Linear(120,84),
            nn.ReLU(),
            nn.Linear(84,10)
        )

        #self.criteon=nn.CrossEntropyLoss()
    #每个网络都有前向函数,但是可以省略backward,因为再向前运行的时候,就自动记录了backward
    def forward(self,x):
        '''

        :param x: [b,3,32,32]
        :return:
        '''
        batchsz=x.size(0)
        #[b,3,32,32]==>[b,16,5,5]
        x=self.conv_unit(x)
        #[b,16,5,5]==>[b,16*5*5]
        x=x.view(batchsz,16*5*5)
        #[b,16*5*5]
        logits=self.fc_unit(x)
        #pred=F.softmax(logits,dim=1)
        return logits

3、神经网路三步:

a)、调用GPU模块:
b)、调用模型
c)、调用误差、优化器

    device=torch.device('cuda')
    model=ResNet18().to(device)
    criteon=nn.CrossEntropyLoss()

    optimizer=optim.Adam(model.parameters(),lr=1e-3)

4、训练以及测试网络

    for epoch in range(1000):
        model.train()
        for batchidx,(x,label) in enumerate(cifar_train):
            x,label=x.to(device),label.to(device)
            logirs=model(x)
            loss=criteon(logirs,label)

            #梯度清零
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()

        print(epoch ,loss.item())


        #转换为测试模式
        model.eval()
        with torch.no_grad():
            total_correct=0
            total_num=0
            for x,label in cifar_test:
                x,label=x.to(device),label.to(device)

                logits=model(x)
                pred=logits.argmax(dim=1)
                total_correct+=torch.eq(pred,label).float().sum().item()
                total_num+=x.size(0)

            acc=total_correct/total_num
            print(epoch,acc)

在训练以及测试的过程中,要记得转化模型的训练和测试模式;
运行效果:

Files already downloaded and verified
Files already downloaded and verified
x torch.Size([32, 3, 32, 32]) label torch.Size([32])
lenet5(
  (conv_unit): Sequential(
    (0): Conv2d(3, 6, kernel_size=(5, 5), stride=(1, 1))
    (1): AvgPool2d(kernel_size=2, stride=2, padding=0)
    (2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))
    (3): AvgPool2d(kernel_size=2, stride=2, padding=0)
  )
  (fc_union): Sequential(
    (0): Linear(in_features=400, out_features=120, bias=True)
    (1): ReLU()
    (2): Linear(in_features=120, out_features=84, bias=True)
    (3): ReLU()
    (4): Linear(in_features=84, out_features=10, bias=True)
  )
)
0 1.610519528388977
0 0.4228
1 1.4471698999404907
1 0.4843
2 1.3781787157058716
2 0.5167
3 1.4658881425857544
3 0.5177
4 0.8951991200447083
4 0.5259
5 1.1710333824157715
5 0.5387
6 1.562530279159546
6 0.5442
7 0.8673275113105774
7 0.5443
8 1.4436936378479004
8 0.5421
9 1.3614578247070312
9 0.5434
10 1.341037392616272
10 0.5531
11 1.10409414768219
11 0.5487
12 0.8848217725753784
12 0.5474
13 0.980401337146759
13 0.5486
14 1.0723121166229248
14 0.5463
15 0.8616059422492981
15 0.5471
16 1.2519404888153076
16 0.5482
17 1.1916581392288208
17 0.5415
18 0.7907223105430603
18 0.5441
19 0.43285447359085083
19 0.5436
20 0.7941941618919373
20 0.5457
21 0.6954908967018127
21 0.5415
22 1.2862902879714966
22 0.5441
23 0.46743243932724
23 0.5439
24 1.0503959655761719
24 0.5413
25 1.3914414644241333
25 0.5507
26 0.933451235294342
26 0.5387
27 0.7994612455368042
27 0.5381
28 0.8405050039291382
28 0.5352
29 0.9237154722213745
29 0.5325
30 1.0469434261322021
30 0.5349
31 1.2612384557724
31 0.5267
32 0.9177519679069519
32 0.5325
33 1.0856417417526245
33 0.5257
34 0.6346448063850403
34 0.5315
35 1.3680710792541504
35 0.5263
36 0.5967005491256714
36 0.5231
37 1.1949267387390137
37 0.5285
38 0.9418867826461792
38 0.527
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 14:05:27  更:2021-09-27 14:07:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 12:38:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码