前言
task2的学习指南干货浓度好高,是一篇相当了不起的深度学习概述。
也有许多高度概述性的图片,我这里存下了一张描述了大部分类型神经网络架构的图。(->2016年)
可恶怎么去不掉水印
pytorch学习资料分享
由于之前跟一个外网youtube博主视频学习过pytorch深度学习,这些内容看着很熟悉。
在此奉上学习资料链接(基本0基础,课上代码,课后作业及课外链接阅读)
b站中译视频合集(总时长24h+,没全部翻完但够学了):
代码+项目《一天学会pytorch深度学习|Learn PyTorch for deep learning in a day. Literally.》中英字幕_哔哩哔哩_bilibili
项目网址-电子书:
Zero to Mastery Learn PyTorch for Deep Learning
看看baseline
模型架构
模型架构上直接调用了预训练模型resnet18,并设置输出类别为2(是否为deepfake图像)。这本质上是迁移学习,将已有模型架构拿过来只修改输出/分类层。
若要从模型架构提升,可以用resnet-50,resnet-101,resnet-152,resnet269e等加权重层数量,试试参数量力大砖飞。
也可以试着使用其他图像分类模型,比如飞书文档中提到的鼻祖Ale2xNet,以及EfficientNet
数据集准备
baseline自定义了一个FFDIDataset类,并重写了__getitem__和__len__函数,为了能够使用dataloader载入自定义数据集
在数据载入dataloader时,还使用了计算机视觉的经典数据增强技巧,resize至统一规格,随机纵向/横向偏转,归一化。
train和valid数据集都默认只载入前1000条。
train可用524429条,valid可用147363条
可以加数据量,但注意配合模型架构大小,否则训练会非常漫长
模型训练
代价函数用的经典交叉熵损失
优化器也是基础的Adam,学习率设置在了0.005(可以改)
学习率调整器用的是StepLR固定步长衰减
训练epoch设置在2
我尝试修改优化器学习率和epoch,发现在只使用几千条数据的情况下,epoch2确实够用了。相同模型架构和数据集大小下,再多的epoch也无法优化loss和valid集上的正确率
我的预设
模型resnet50
训练集200000,验证集50000
显卡P100
训练时batch_size 104(显存占用14.7/16g)
epoch 2,每个epoch耗时约20min(时间不够了,可以再加epoch。)
vaild集上正确率65.898 (第一次是62.994)
提交test集上正确率82.056
提升显著,很开心