从上次的学习中,我了解了Deepfake攻防的背景以及对于baseline有了初步理解,这次我主要对于模型的性能进行提升。
01 增加epoch
epoch就是在模型训练过程中的迭代轮数,这样的迭代轮数自然不能太少,如果过少会导致模型欠拟合,不能达到分类的效果。在baseline中,epoch的值为2,我们将epoch的值改为30,如下图所示:
这样一来,通过迭代轮数的增加,拟合会越来越好,得到的模型也越来越能够更好地进行分类任务。这次训练一共花费了9分钟,得分比起直接提交baseline的0.509有了较大的提高。
02 增加数据数量
我们在baseline中发现,数据集中的训练集有50w+的数据,验证集中存在10w+的数据,而此时仅仅取了训练集中的前1000个进行训练,这样做对于数据的利用远远不够,同时也不能保证训练样本的多样性。因此,我们将baseline中训练集取前1000调整为取前10000,这样做可以提高训练数据的多样性,提升模型的性能。
通过这样的修改,我们得到了更高的分数0.873。
这说明数据的多样性是很重要的,只有通过大量数据进行训练得出的模型才具有优良的性能。
03 调整网络层数
我们在思考,能不能将18层的ResNet换成层数更多的网络,更复杂的网络或许会有更好的效果。于是我们将ResNet18改为ResNet50,进行了训练。结果训练的时间很长,大概需要半小时,而且效果反倒不如ResNet18,从0.873下降到0.839,说明层数多的网络不一定就能够得到更好的效果,需要根据合适的需求来适当选取网络。
04 一些思考
01 能不能存在一些不仅仅是调参数值的方法(epoch、数据集的数量以及网络),而是从网络结构出发进行一定的优化,使分数进一步提高?
02 在训练代码的过程中,CPU和GPU的使用是怎样的?
CPU常常会超出100%,而GPU是达到100%之后就变为0,这中间发生了什么?
九月助教是这样回答的,
CPU有两种可能, 一种是虚拟机, 会占用其他空闲的机器的CPU, 另一种是CPU超频
GPU是根据训练的epoch来的, 数据进出的间隙, 会利用率下降