亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Pytorch深度學習經典卷積神經網絡resnet模塊實例分析

發布時間:2022-05-13 09:27:51 來源:億速云 閱讀:182 作者:iii 欄目:開發技術

這篇文章主要介紹“Pytorch深度學習經典卷積神經網絡resnet模塊實例分析”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Pytorch深度學習經典卷積神經網絡resnet模塊實例分析”文章能幫助大家解決問題。

    前言

    隨著深度學習的不斷發展,從開山之作Alexnet到VGG,網絡結構不斷優化,但是在VGG網絡研究過程中,人們發現隨著網絡深度的不斷提高,準確率卻沒有得到提高,如圖所示:

    Pytorch深度學習經典卷積神經網絡resnet模塊實例分析

    人們覺得深度學習到此就停止了,不能繼續研究了,但是經過一段時間的發展,殘差網絡(resnet)解決了這一問題。

    一、resnet

    Pytorch深度學習經典卷積神經網絡resnet模塊實例分析

    如圖所示:簡單來說就是保留之前的特征,有時候當圖片經過卷積進行特征提取,得到的結果反而沒有之前的很好,所以resnet提出保留之前的特征,這里還需要經過一些處理,在下面代碼講解中將詳細介紹。

    二、resnet網絡結構

    Pytorch深度學習經典卷積神經網絡resnet模塊實例分析

    本文將主要介紹resnet18

    三、resnet18

    1.導包

    import torch
    import torchvision.transforms as trans
    import torchvision as tv
    import torch.nn as nn
    from torch.autograd import Variable
    from torch.utils import data
    from torch.optim import lr_scheduler

    2.殘差模塊

    這個模塊完成的功能如圖所示:

    Pytorch深度學習經典卷積神經網絡resnet模塊實例分析

    class tiao(nn.Module):
        def __init__(self,shuru,shuchu):
            super(tiao, self).__init__()
            self.conv1=nn.Conv2d(in_channels=shuru,out_channels=shuchu,kernel_size=(3,3),padding=(1,1))
            self.bath=nn.BatchNorm2d(shuchu)
            self.relu=nn.ReLU()
        def forward(self,x):
            x1=self.conv1(x)
            x2=self.bath(x1)
            x3=self.relu(x2)
            x4=self.conv1(x3)
            x5=self.bath(x4)
            x6=self.relu(x5)
            x7=x6+x
            return x7

    2.通道數翻倍殘差模塊

    模塊完成功能如圖所示:

    Pytorch深度學習經典卷積神經網絡resnet模塊實例分析

    在這個模塊中,要注意原始圖像的通道數要進行翻倍,要不然后面是不能進行相加。

    class tiao2(nn.Module):
        def __init__(self,shuru):
            super(tiao2, self).__init__()
            self.conv1=nn.Conv2d(in_channels=shuru,out_channels=shuru*2,kernel_size=(3,3),stride=(2,2),padding=(1,1))
            self.conv11=nn.Conv2d(in_channels=shuru,out_channels=shuru*2,kernel_size=(1,1),stride=(2,2))
            self.batch=nn.BatchNorm2d(shuru*2)
            self.relu=nn.ReLU()
            self.conv2=nn.Conv2d(in_channels=shuru*2,out_channels=shuru*2,kernel_size=(3,3),stride=(1,1),padding=(1,1))
        def forward(self,x):
            x1=self.conv1(x)
            x2=self.batch(x1)
            x3=self.relu(x2)
            x4=self.conv2(x3)
            x5=self.batch(x4)
            x6=self.relu(x5)
            x11=self.conv11(x)
            x7=x11+x6
            return x7

    3.rensnet18模塊

    class resnet18(nn.Module):
        def __init__(self):
            super(resnet18, self).__init__()
            self.conv1=nn.Conv2d(in_channels=3,out_channels=64,kernel_size=(7,7),stride=(2,2),padding=(3,3))
            self.bath=nn.BatchNorm2d(64)
            self.relu=nn.ReLU()
            self.max=nn.MaxPool2d(2,2)
            self.tiao1=tiao(64,64)
            self.tiao2=tiao(64,64)
            self.tiao3=tiao2(64)
            self.tiao4=tiao(128,128)
            self.tiao5=tiao2(128)
            self.tiao6=tiao(256,256)
            self.tiao7=tiao2(256)
            self.tiao8=tiao(512,512)
            self.a=nn.AdaptiveAvgPool2d(output_size=(1,1))
            self.l=nn.Linear(512,10)
        def forward(self,x):
            x1=self.conv1(x)
            x2=self.bath(x1)
            x3=self.relu(x2)
            x4=self.tiao1(x3)
            x5=self.tiao2(x4)
            x6=self.tiao3(x5)
            x7=self.tiao4(x6)
            x8=self.tiao5(x7)
            x9=self.tiao6(x8)
            x10=self.tiao7(x9)
            x11=self.tiao8(x10)
            x12=self.a(x11)
            x13=x12.view(x12.size()[0],-1)
            x14=self.l(x13)
            return x14

    這個網絡簡單來說16層卷積,1層全連接,訓練參數相對較少,模型相對來說比較簡單。

    4.數據測試

    model=resnet18().cuda()
    input=torch.randn(1,3,64,64).cuda()
    output=model(input)
    print(output)

    Pytorch深度學習經典卷積神經網絡resnet模塊實例分析

    5.損失函數,優化器

    損失函數

    loss=nn.CrossEntropyLoss()

    在優化器中,將學習率進行每10步自動衰減

    opt=torch.optim.SGD(model.parameters(),lr=0.001,momentum=0.9)exp_lr=lr_scheduler.StepLR(opt,step_size=10,gamma=0.1)opt=torch.optim.SGD(model.parameters(),lr=0.001,momentum=0.9)
    exp_lr=lr_scheduler.StepLR(opt,step_size=10,gamma=0.1)

    Pytorch深度學習經典卷積神經網絡resnet模塊實例分析

    Pytorch深度學習經典卷積神經網絡resnet模塊實例分析

    Pytorch深度學習經典卷積神經網絡resnet模塊實例分析

    在這里可以看一下對比圖,發現添加學習率自動衰減,loss下降速度會快一些,這說明模型擬合效果比較好。

    6.加載數據集,數據增強

    這里我們仍然選擇cifar10數據集,首先對數據進行增強,增加模型的泛華能力。

      transs=trans.Compose([
            trans.Resize(256),
            trans.RandomHorizontalFlip(),
            trans.RandomCrop(64),
            trans.ColorJitter(brightness=0.5,contrast=0.5,hue=0.3),
            trans.ToTensor(),
            trans.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))
        ])

    ColorJitter函數中brightness(亮度)contrast(對比度)saturation(飽和度)hue(色調)

    加載cifar10數據集:

        train=tv.datasets.CIFAR10(
            root=r'E:\桌面\資料\cv3\數據集\cifar-10-batches-py',
            train=True,
            download=True,
            transform=transs
        )
        trainloader=data.DataLoader(
            train,
            num_workers=4,
            batch_size=8,
            shuffle=True,
            drop_last=True
        )

    7.訓練數據

        for i in range(3):
            running_loss=0
            for index,data in enumerate(trainloader):
                x,y=data
                x=x.cuda()
                y=y.cuda()
                x=Variable(x)
                y=Variable(y)
                opt.zero_grad()
                h=model(x)
                loss1=loss(h,y)
                loss1.backward()
                opt.step()
                running_loss+=loss1.item()
                if index%100==99:
                    avg_loos=running_loss/100
                    running_loss=0
                    print("avg_loss",avg_loos)

    8.保存模型

    torch.save(model.state_dict(),'resnet18.pth')

    9.加載測試集數據,進行模型測試

    首先加載訓練好的模型

    model.load_state_dict(torch.load('resnet18.pth'),False)

    讀取數據

     test = tv.datasets.ImageFolder(
            root=r'E:\桌面\資料\cv3\數據',
            transform=transs,
        )
        testloader = data.DataLoader(
            test,
            batch_size=16,
            shuffle=False,
        )

    測試數據

    acc=0
    total=0
        for data in testloader:
            inputs,indel=data
            out=model(inputs.cuda())
            _,prediction=torch.max(out.cpu(),1)
            total+=indel.size(0)
            b=(prediction==indel)
            acc+=b.sum()
        print("準確率%d %%"%(100*acc/total))

    四、resnet深層對比

    上面提到VGG網絡層次越深,準確率越低,為了解決這一問題,才提出了殘差網絡(resnet),那么在resnet網絡中,到底會不會出現這一問題。

    Pytorch深度學習經典卷積神經網絡resnet模塊實例分析

    如圖所示:隨著,訓練層次不斷提高,模型越來越好,成功解決了VGG網絡的問題,到現在為止,殘差網絡還是被大多數人使用。

    關于“Pytorch深度學習經典卷積神經網絡resnet模塊實例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    嵊泗县| 平顶山市| 来宾市| 南昌市| 涟源市| 方正县| 北京市| 罗江县| 宁安市| 大英县| 都安| 永修县| 新津县| 堆龙德庆县| 宝应县| 屯昌县| 亚东县| 拉孜县| 汕头市| 武穴市| 宜黄县| 宜昌市| 进贤县| 平阳县| 靖远县| 遵义县| 肥西县| 巩留县| 厦门市| 岗巴县| 通化市| 海丰县| 城市| 招远市| 洛扎县| 南城县| 怀柔区| 常德市| 泾源县| 宣武区| 开化县|