efficient解析及迁移应用

efficient解析及迁移应用

efficient解析

efficientNet中探索了网络深度宽度以及输入图像分辨率对于卷积神经网络的提升。
增加网络的深度 depth 能够得到更加丰富、复杂的特征并且能够很好的应用到其它任务中。但网络的深度过深会面临梯度消失,训练困难的问题。
增加网络的 width 够获得更高细粒度的特征并且也更容易训练,但对于 width 很大而深度较浅的网络往往很难学习到更深层次的特征。
增加输入网络的图像分辨率能够潜在地获得更高细粒度的特征模板,但对于非常高的输入分辨率,准确率的增益也会减小。并且大分辨率图像会增加计算量。

计算最佳d,w,r的具体方式可以参考这篇blog
详细的网络结构解析参考这篇blog

efficient迁移完成看画猜作者

该实验的数据集结构和之前猫狗大战的不一样,不能直接用imageFolder方法生成dataset。
如何实现Dataloader自定义数据读取参考这篇blog
同时我们还需要对label及name_lsit文件进行处理并区分训练集和验证集

import numpy
label_path  = "/content/gdrive/MyDrive/ML/dataset/Art/train.csv"

#生成classes列表以及label列表,classes列表是no和name的映射表。label是文件名和res的映射
def splitTxt(fp,s=' '):
  art_list=dict()
  art = open(fp, "r+")
  for inf in art.readlines():
    inf = str(inf).replace("\n", "")  
    inf = inf.split(s, 1)  
    art_list[inf[0]]=inf[1]
  art.close()
  return art_list
classes = splitTxt("/content/gdrive/MyDrive/ML/dataset/Art/name_list.txt")
label_list = splitTxt(label_path,s=',')
t_list = list(label_list.keys())
t_list = [i+".jpg" for i in t_list]
t_list = [os.path.join("/content/gdrive/MyDrive/ML/dataset/Art/train/",i) for i in t_list ] 

train_list = t_list[1:6000]   #训练集
valid_list = t_list[6001:]    #验证集
print(train_list[:6])

label = list(label_list.values())
num_train = label[1:6000]
num_valid = label[6001:]

接下来我们需要载入模型,对于efficientNet我们可以直接使用pytorch提供的函数,也可以使用其提供的权重。但是在代码过程中,一开始正确率奇低。后来发现可能是因为先修改fc层,然后再载入预训练参数,但实际上没有成功载入,因为参数size是不匹配的。但是如果先load再修改参数,就直接代码报错size不匹配。但上次猫狗使用预训练模型却又95正确率。我增加了一个全连接层,训练了40轮,最后在验证集上的正确率如图所示:
正确率

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值