目录
一、前言
上周主要完成:
- ①与老师讨论损失函数与介绍部分内容;
- ②基于盐数据设计TU-Net的网络架构,并思考如何引出该网络架构;
- ③验证TU-Net在SEG模拟盐数据上的适用情况;
本周主要完成:
- ①解决验证集上损失函数的波动问题;
- ②继续完善论文与实验;
- ③设计盐数据速度模型展示图;
二、完成情况
2.1 解决网络波动问题——学习率
7月底-8月主要在完成OpenFWI数据集上的实验,包括对比实验与消融实验。当时验证集上的损失函数有一定的波动情况(batchsize设置20,学习率设置0.001),但是结果显示这个波动的影响不算大,且验证集损失有下降趋势。因此,之前没有在在意这个问题。
但是上周在盐数据上进行实验时,发现验证集的损失值波动非常大(batchsize设置10,学习率设置0.001),波动情况如下图所示(该数据进行了归一化):
- SEG_Net_loss3_weight_TrainSize1600_Epoch160_BatchSize10_LR0.001TrainLoss:
后续我尝试在运行盐数据时不采用归一化操作,波动会小很多,但是指标也不是很稳定。因此,我尝试降低学习率或者增大batchsize调整波动情况。
- 在不改变学习率的情况下(0.001),将batchsize从10调整为15:SEG_Net2_loss1+2_TrainSize1600_Epoch160_BatchSize15_LR0.001TrainLoss:。在调整中,主要有两个改变:①指标相比于batchsize为10的时候有改善;②训练时间增加了。在batchsize为10的时候,每一个epoch的训练时间大概为1分25秒,当时间增长后,每一个epoch的训练时间变为2分14秒。
- 在batchsize为10的情况下,将学习率降低为0.0001:SEG_Net2_loss1+2_TrainSize1600_Epoch160_BatchSize10_LR0.0001TrainLoss。在本次调整中,主要有两个明显的改变:①与增大batchsize相比,这个波动明显更小了,但是这会导致指标下降,因为很长时间无法到达最低点;②训练时间没有改变。
- 在进行了两个尝试(①增加batchsize、②降低学习率)后,我有了新的思考,尝试将学习率取两者的一半,折中取为0.0005,损失下降情况与上图接近,且指标明显变好。
- 最后继续尝试了0.0003的学习率,在该指标下,效果最好。
- 在盐数据上进行学习率与batchsize的尝试后,我回想起之前在OpenFWI数据集上的尝试。
下面的前两张图片是当时在OpenFWI CurveVelA数据集上的实验记录(蓝色曲线代表训练集,橘色曲线代表验证集):
- ①TU_Net_loss3_TrainSize24000_Epoch160_BatchSize20_LR0.001TrainLoss:
- ②TU_Net_loss3_weight_TrainSize24000_Epoch180_BatchSize64_LR0.001TrainLoss:
- ③TU_Net_loss3_weight_TrainSize24000_Epoch160_BatchSize20_LR0.0001TrainLoss:
- ④TU_Net_loss3_weight_TrainSize24000_Epoch160_BatchSize20_LR0.0005TrainLoss:
- ⑤TU_Net_loss3_weight_TrainSize24000_Epoch160_BatchSize20_LR0.0003TrainLoss
在之前实验的时候,认为超参数对实验的影响不算很大。另外,最初选择参数时只使用了5000的数据集,这也会影响我们的判断。
梯度下降算法的每次迭代都会受到学习率的影响:
- 如果学习率过小,那达到模型收敛所需要的迭代次数会非常高,训练时间会增加,且模型容易欠拟合;
- 如果学习率过大,那模型每次学习步长就会增大,很难达到最小值;
2.2 设计盐数据速度模型展示图
三、下周计划
- 继续完成实验,并完善论文;
- 准备组会分享内容;
- 思考类似于热力图的展示图;