大佬教程收集整理的这篇文章主要介绍了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.
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的VGG 模型在使用 Pytorch 的 CIFAR10 数据集上没有收敛全部内容,希望文章能够帮你解决VGG 模型在使用 Pytorch 的 CIFAR10 数据集上没有收敛所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。