程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了VGG 模型在使用 Pytorch 的 CIFAR10 数据集上没有收敛大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决VGG 模型在使用 Pytorch 的 CIFAR10 数据集上没有收敛?@H_944_1@ 开发过程中遇到VGG 模型在使用 Pytorch 的 CIFAR10 数据集上没有收敛的问题如何解决?下面主要结合日常开发的经验,给出你关于VGG 模型在使用 Pytorch 的 CIFAR10 数据集上没有收敛的解决方法建议,希望对你解决VGG 模型在使用 Pytorch 的 CIFAR10 数据集上没有收敛有所启发或帮助;

我的代码可在

https://www.kaggle.com/aman0807/vgg-cifar10/execution

如您所见,验证损失从训练开始就发散了。

我尝试过 Adam 优化器和 SGD 优化器。我无法弄清楚我做错了什么。请为我指明正确的方向。

编辑:在此处包含完整代码

# imporTing DependencIEs

import os
import torch
import torch.nn as nn
import torch.nn.functional as F
from torchvision.datasets import CIFAR10
from torchvision import transforms
from torch.utils.data import DataLoader
from tqdm import tqdm
from datetiR_672_11845@e import datetiR_672_11845@e

# Defining model
arch = [64,64,'M',128,256,512,'M']

class VGGNet(nn.ModulE):
    def __init__(self,in_chAnnels,num_classes):
        super().__init__()
        self.in_chAnnels = in_chAnnels
        self.conv_layers = self.create_conv_layers(arch)
        self.fcs = nn.Sequential(
            nn.linear(in_features=512*1*1,out_features=4096),nn.ReLU(),nn.Dropout(0.5),nn.linear(in_features=4096,nn.linear(4096,num_classes)
        )

    def forWARD(self,X):
        x = self.conv_layers(X)
        # print(x.shapE)
        x = x.reshape(x.shape[0],-1)
        x = self.fcs(X)
        return x

    def create_conv_layers(self,arch):
        layers = []
        in_chAnnels = self.in_chAnnels
        
        for x in arch:            
            
            if type(X) == int:

                out_chAnnels = x
                layers += [nn.Conv2d(in_chAnnels=in_chAnnels,out_chAnnels=out_chAnnels,kernel_size=(3,3),StriDe=(1,1),padding=(1,1)),nn.batchnorm2d(X),]

                in_chAnnels = x
            
            elif x =='M':
                layers += [nn.MaxPool2d(kernel_size=(2,2),StriDe=(2,2))]

        return nn.Sequential(*layers)

# Hyperparameters and setTings

device = "cuda" if torch.cuda.is_available() else "cpu"
print(devicE)
TraiN_BATCH_SIZE = 64
VAL_BATCH_SIZE = 16
EPOCHS = 50

Train_data = CIFAR10(root=".",Train=True,transform=transforms.Compose([transforms.ToTensor()]),download=TruE)

# print(len(Train_data))
val_data = CIFAR10(root=".",Train=false,download=TruE)
# print(len(val_data))


Train_loader = DataLoader(Train_data,batch_size=TraiN_BATCH_SIZE,shuffle=True,num_workers=8)
val_loader = DataLoader(val_data,batch_size=VAL_BATCH_SIZE,num_workers=8)
# print(len(Train_loader))
# print(len(val_loader))


num_Train_batches = int(len(Train_data)/TraiN_BATCH_SIZE) 
num_val_batches = int(len(val_data)/VAL_BATCH_SIZE)

# Training and Val Loop

model = VGGNet(3,10).to(devicE)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)
# optim = torch.optim.Adam(model.parameters(),lr=0.01)

scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer,patIEnce=10,verbose=TruE)

# save_path = os.path.join(r"Trained_models",f'{datetiR_672_11845@e.Now().strftime("%m%d_%H%M%s")}.pth')

def Train_val():
    
    for epoch in range(1,EPOCHS+1):
        print(f"Epoch: {epoch}/20")
        

        model.Train()
        @R_658_10586@l_loss = 0
        for data in Train_loader:
            image,target = data[0],data[1]
            image,target = image.to(devicE),target.to(devicE) 
            optimizer.zero_grad()
            output = model(imagE)
            loss = criterion(output,target) 
            @R_658_10586@l_loss += loss.item()
            loss.BACkWARD()
            optimizer.step()
        print(f"Loss : {@R_658_10586@l_loss / num_Train_batches}")
        
        save_path = os.path.join(r"Trained_models",f'{datetiR_672_11845@e.Now().strftime("%m%d_%H%M%s")}_{epoch}.pth')

        if epoch % 5 == 0:
            torch.save(model.state_Dict(),save_path)

        with torch.no_grad():
            model.eval()
            @R_658_10586@l_val_loss = 0
            for data in val_loader:
                image,data[1]
                image,target.to(devicE) 
                output = model(imagE)
                val_loss = criterion(output,target)
                @R_658_10586@l_val_loss += val_loss

            @R_658_10586@l_val_loss = @R_658_10586@l_val_loss/num_val_batches
            print(f"Val Loss: {@R_658_10586@l_val_loss}")

            scheduler.step(@R_658_10586@l_val_loss)

输出是:

> Epoch: 1/20 Loss : 1.3286100650795292 Val Loss: 1.3787670135498047
> Epoch: 2/20 Loss : 0.822020811685832 Val Loss: 0.948610246181488
> Epoch: 3/20 Loss : 0.6018326392113476 Val Loss: 0.9581698775291443
> Epoch: 4/20 Loss : 0.47134833609764004 Val Loss: 1.2446043491363525
> Epoch: 5/20 Loss : 0.35625831704114524 Val Loss: 0.8038020730018616
> Epoch: 6/20 Loss : 0.27602518926566605 Val Loss: 0.6090452075004578
> Epoch: 7/20 Loss : 0.21279048924686128 Val Loss: 0.6626076102256775
> Epoch: 8/20 Loss : 0.16782210255280214 Val Loss: 0.6386368870735168
> Epoch: 9/20 Loss : 0.12904227719518205 Val Loss: 0.8135524988174438
> Epoch: 10/20 Loss : 0.10961572862077902 Val Loss: 0.727300226688385
> Epoch: 11/20 Loss : 0.08377284912137456 Val Loss: 0.7346469163894653
> Epoch: 12/20 Loss : 0.07044737199237916 Val Loss: 0.8241418600082397
> Epoch: 13/20 Loss : 0.06040401630707726 Val Loss: 0.8411757349967957
> Epoch: 14/20 Loss : 0.05157513573171604 Val Loss: 0.9980310201644897
> Epoch: 15/20 Loss : 0.04703645325243019 Val Loss: 0.7441162467002869
> Epoch: 16/20 Loss : 0.039386494244257594 Val Loss: 0.7185537219047546
> Epoch: 17/20 Loss : 0.0361507039006692 Val Loss: 0.7251362800598145
> Epoch    17: reducing learning rate of group 0 to 1.0000e-03. Epoch:
> 18/20 Loss : 0.010131187833331622 Val Loss: 0.6911444067955017 Epoch:
> 19/20 Loss : 0.004273188020082817 Val Loss: 0.6758599877357483 Epoch:
> 20/20 Loss : 0.0023282255553611917 Val Loss: 0.6790934801101685 Epoch:
> 21/20 Loss : 0.002249847758697408 Val Loss: 0.6877240538597107 Epoch:
> 22/20 Loss : 0.0017385115527510854 Val Loss: 0.6955451369285583 Epoch:
> 23/20 Loss : 0.0015288436127294692 Val Loss: 0.6895047426223755 Epoch:
> 24/20 Loss : 0.0013521527944272392 Val Loss: 0.6986600160598755 Epoch:
> 25/20 Loss : 0.001302041847793007 Val Loss: 0.7062056660652161 Epoch:
> 26/20 Loss : 0.0009422088254753626 Val Loss: 0.721610426902771 Epoch:
> 27/20 Loss : 0.00092220353266205 Val Loss: 0.7185065150260925 Epoch:
> 28/20 Loss : 0.000855279816558849 Val Loss: 0.7262870669364929 Epoch  
> 28: reducing learning rate of group 0 to 1.0000e-04. Epoch: 29/20 Loss
> : 0.0009319903464029908 Val Loss: 0.7129291892051697 Epoch: 30/20 Loss
> : 0.0009213638452758586 Val Loss: 0.7219230532646179 Epoch: 31/20 Loss
> : 0.000790543920696094 Val Loss: 0.7180697321891785 Epoch: 32/20 Loss
> : 0.0007001494628562334 Val Loss: 0.7132201194763184 Epoch: 33/20 Loss
> : 0.000848956296528779 Val Loss: 0.720444917678833 Epoch: 34/20 Loss :
> 0.0007309111221651813 Val Loss: 0.7152464389801025 Epoch: 35/20 Loss : 0.0008760697004345624 Val Loss: 0.7213227152824402 Epoch: 36/20 Loss : 0.0007820251893755433 Val Loss: 0.7167501449584961 Epoch: 37/20 Loss : 0.0008780398232813891 Val Loss: 0.7176992297172546 Epoch: 38/20 Loss : 0.0006976223276931253 Val Loss: 0.7317324280738831 Epoch: 39/20 Loss : 0.0007082251550411605 Val Loss: 0.7190949320793152 Epoch    39: reducing learning rate of group 0 to 1.0000e-05. Epoch: 40/20 Loss :
> 0.0007200245124846 Val Loss: 0.7223398089408875 Epoch: 41/20 Loss : 0.0007270275670335591 Val Loss: 0.721064031124115 Epoch: 42/20 Loss : 0.0008191512905424633 Val Loss: 0.7175146341323853 Epoch: 43/20 Loss : 0.0007468872463225763 Val Loss: 0.7313894629478455 Epoch: 44/20 Loss : 0.0007858102934361841 Val Loss: 0.7234065532684326 Epoch: 45/20 Loss : 0.0008550570492202036 Val Loss: 0.7210699319839478 Epoch: 46/20 Loss : 0.0007921795028490795 Val Loss: 0.7209402322769165 Epoch: 47/20 Loss : 0.0007907233434224173 Val Loss: 0.7207257747650146 Epoch: 48/20 Loss : 0.0008106642895507929 Val Loss: 0.7174465656280518 Epoch: 49/20 Loss : 0.0008104693277185383 Val Loss: 0.7192382216453552 Epoch: 50/20 Loss : 0.0007664988370204754 Val Loss: 0.722599446773529 Epoch    50: reducing learning rate of group 0 to 1.0000e-06.

解决方法@H_944_1@

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的VGG 模型在使用 Pytorch 的 CIFAR10 数据集上没有收敛全部内容,希望文章能够帮你解决VGG 模型在使用 Pytorch 的 CIFAR10 数据集上没有收敛所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: