这里我在经过了非常久的训练后发现,在训练完后中断后,再次训练没有’调用’这个之前训练完的参数会从头开始训练,对于网络的优化的时间又要更久一些,因此我在这里就调用我之前训练后保存的模型,来减少悬链的这里我为了保存模型和调用学到的模型,在实例化模型之后调用之前学过,训练的时间就减少了
model = SVHN_Model1()state_dict=torch.load('bsbest.pt')model.load_state_dict(state_dict)
我的调差
首先,最为简单的就是调大batch_size,调到gpu能够选到的范围
*对于学习率,一般来说先是进行,基于自己的情况,能够有足够的训练次数时,先是学习率的步长大一些观察训练的损失情况,然后在可以选择对学习率的调整,然后在后面学习率调小一些,具体可以参考这篇博客
还有就是用“cosine” decay,比较有用效果
对于网络结构的有化,运用relu,dropout的方法在网络结构上这个在yolov4中作者也用到了这个调学习率的方法,是yolov4能够在yolov3的基础上还能够提升的一个原因
数据集的划分
深度学习离不开数据,好的数据往往能够让我们的效率事半功倍,最为常见
的数据划分的方法就是划分9:1的训练集和验证集,除此之外还可以划分如下图所示*的
交叉验证,在每个数据集上留出一部分作为验证集
可以参考这篇博客
进行正则化
学习过深度学习,机器学习都会知道什么是正则化,无非最为常见的的包括L1正则化和L2正则化,
先给出数学公式:
L1的表达式为:
L2的表达式为:
λ∈(0,1)
在pytorch可用SGD来实现随机梯度下降
optimizer = optim.SGD(model.parameters(), lr =0.01, momentum=0.9,weight_decay=1e-5)
其中SGD为随机梯度下降的算法,weight_decay为权重衰减值(这里说句题外话,pytorch等框架的好处就是不用自己写公式就可实现对一些复杂公式的实现,只需要调用API就能够轻松的实现,想这个梯度下降直接调用就可以了,还有就是像反向传播不用自己写就只要在pytorch写好前向传播就可以实