周报(7.22-7.28)
本周工作
-
完成对FCNVMB的训练工作,并对比了FCNVMB和InversionNet的网络模型,发现以下特点。
a. FCNVMB相比InversionNet,使用了跳跃连接,直接传递相关的特征给解码器,避免了编码器中特征的丢失。相关笔记在这里。
b. 使用卷积或池化有不同的优缺点,如下:
卷积
优势:
1.图像具有局部特性(局部连接,局部感受野)
2.参数共享(特征跟位置无关,一个眼睛在两边还是中间都是眼睛)
3.训练速度快,因为很多芯片对卷积操作有优化实现
特点:
1.卷积核大小选择奇数,是为了保护位置信息,因为有中心点,另外padding时是对称的
2.步长设置为大于1时为降采样,与pooling相比,好处是降低了计算量,缺点是损失了一些信息
3.参数个数与图像尺寸无关,所以是尺度不敏感的,全连接层对尺度敏感,因为参数个数是由尺寸决定的池化
优势:
1.用于减少图像尺寸,从而减少计算量
2.增大感受野
3.一定程度解决平移鲁棒:解决小偏移问题,进行特征压缩,提取主要特征
劣势:
1.损失了空间位置精度
特点:
1.常使用不重叠,不补零(不padding)
2.没有用于求导的参数
3.池化层参数为步长和池化核大小同时,根据代码实践,我发现池化层的内存占用和计算量都比卷积略大,需要进一步探索。
-
SeisInvNet的特点
如果说InversionNet和FCNVMB模型都是黑盒模型,只需要关注输入和输出,那么SeisInvNet就是探索了输入数据的内在特征,比如震源和接收器的位置等。它的优势是相对去前两个模型,SeisInvNet对输入做了一定程度上的预处理或者特征提取工作,而劣势在于SeisInvNet本质上也没有考虑输入和输出的物理关系,全靠模型内部拟合表达物理关系。
出现问题
-
测试集Loss跳跃的问题
在训练过程中,我遵循8:2原则,将8成数据作为训练集,2成数据作为验证集,分别计算mse,训练集结果如下:
图示浅色线条表示实际数据,橙色线条表示经0.6系数平滑处理后的数据。在80轮的训练后,模型已经收敛,Loss表现正常,但对于验证集,Loss就比较异常了:
图示浅色线条表示实际数据,橙色线条表示经0.6系数平滑处理后的数据。可以看到经平滑后的数据仍然在剧烈波动,就不难想象未经平滑数据的表现了。验证集数据显示,模型在70轮时在验证集上表现综合最优,这一结果符合训练集的结论。我推测验证集的Mse Loss剧烈波动的原因是我对输出进行了归一化,使得训练集表现确实在不断优化的同时,验证集数据的量级本来就很小了,很微小的波动也使得Mse Loss剧烈波动,使得验证集Loss失去了它本来的作用。下周考虑将归一化的输出还原为原始值之后再重新衡量模型的表现
-
FCNVMB运行内存大,速度慢的问题
FCNVMB在网络结构上其实与InversionNet也较为相似,但两者的训练速度和内存占用差别较大,需要考虑代码的优化问题,检查是不是代码问题导致的。
下周任务
- 学习地震正演过程,完成对SEG数据的正演工作。
- 学习DD-Net,学习没有触及到的知识点。
- 继续学习地震反演原理,深度学习原理。