第四次作业:猫狗大战挑战赛

关键步骤截图

调参侠

在这里插入图片描述

归一化

  • 提高数据在不同的网络层训练时的分布相似性
  • 尽量使输入在激活函数的敏感区
  • 有利于梯度下降,加速收敛,模型更准确稳定
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
vgg_format = transforms.Compose([
                transforms.CenterCrop(224),
                transforms.ToTensor(),
                normalize,
            ])

常规操作:调调参,通过迭代比较取效果好的作为模型进行后面迁移到测试【研习社】的数据

  • 数据集比例得当,数量在可行范围内
  • 学习率
  • 优化器
    Adam是添加了动量的梯度下降优化器,大大提高了收敛的速度
  • epochs
  • batch_size
  • 增加网络层数
  • 防止过拟合—次数少了还想再试试,次数多了准确率还降了,也许这就是神秘的玄学力量吧!
  • 激活函数的选择
lr = 0.0001

optimizer_vgg = torch.optim.Adam(model_vgg_new.classifier[8].parameters(),lr = lr)

def train_model(model,dataloader,size,epochs=250,optimizer=None):
	...

train_model(model_vgg_new,loader_train,size=dset_sizes['train'], epochs=5, 
            optimizer=optimizer_vgg)
  • SELU激活函数
    具有自归一化特点,即使加入噪声也能收敛到均值为0、方差为1或方差具有上下界。
    上面已经手动归一化,这里又用激活函数来自动归一化,为什么这么做呢?后面是使用梯度下降法求最优解(用老师的代码没有改变优化器时),很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛,所以归一化往往非常有必要,否则很难收敛甚至不能收敛

  • Dropout:解决在训练集上表现很好而在测试集上表现一般的过拟合现象

model_vgg_new.classifier._modules['6'] = nn.SELU(inplace=False)
model_vgg_new.classifier._modules['7'] = nn.Dropout(p=0.5,inplace=False)
model_vgg_new.classifier._modules['8'] = nn.Linear(4096, 2)
model_vgg_new.classifier._modules['9'] = torch.nn.LogSoftmax(dim = 1)
if epoch_acc > max_acc:
            max_acc = epoch_acc
            torch.save(model, '/content/drive/My Drive/best_res.pth')

想法和解读

训练过程中GPU掉线的操作就很秀,可以防止其自动掉线

过程中的错误

  • 相对路径设置错误
    原因:解压研习社下载的数据集时,误以为第二级目录就有test,其实是在第三级目录,就很mmp了。

在这里插入图片描述

VGG分类神经网络的明显优点—规律很明显

  • 图像规律缩小
    随着网络的加深,图像的高度和宽度都在以一定的规律不断缩小,每次池化后刚好缩小一半
  • 通道数规律增加
    在每组卷积操作后增加一倍
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值