2024 7.8~7.14 周报
一、上周工作
二、本周计划
跑实验、机器学习、数学表达式
三、完成情况
1. 跑实验
1)编码器加入DenseNet,并在解码器的第一层加入cbam:
损失函数——smooth、lpips,跑的CurveVelA,学习率0.001,数据量24000。
改了损失函数后效果并没有之前好,指标上lpips体现较为明显,跟InversionNet差不多。效果上层与层的轮廓也没有之前清晰。
分析原因:损失函数设计的问题
跑完大数据量并没有很大提升,过于耗时,后面开始从小数据量进行训练,及时止损。
2)测试网络部分——5000数据量
损失函数:l1+l2
跑的CurveFaultA
学习率0.0001
①基于Inv,编码器加入了DenseNet,并在解码器的每一层加入cbam:密集连接已经学习到较多的特征了,解码器每一层都加入cbam,效果并没有很大提升,还会增加计算量。
②基于Inv,编码器加入了DenseNet,并在解码器的第一层加入cbam:测试网络的三个实验中,指标和效果最好,所有指标均优于Inv。
③基于Inv,编码器加入了DenseNet:loss有点奇怪,可能是数据集不同,在第100 epoch左右,loss出现垂直下降。
3)测试损失函数部分——5000数据量
损失函数:mae、logcosh
跑的CurveFaultA
学习率0.0001
指标和效果目前最好。
2.机器学习
机器学习常识、激活函数、softmax、多个输出的分类(Optional)
3.数学表达式
累加累乘、积分、min、argmin
4.如何知道模型中不同层的名称呢?
一种方法是直接print打印模型,效果如下:
DenseNet(
(convblock1): ConvBlock(
(layers): Sequential(
(0): Conv2d(5, 32, kernel_size=(7, 1), stride=(2, 1), padding=(3, 0))
(1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.2, inplace=True)
)
)
(layer1): DenseBlock(
(layers): Sequential(
(0): _DenseLayer(
(dense_layer): Sequential(
(0): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(1): ReLU(inplace=True)
(2): Conv2d(64, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(4): ReLU(inplace=True)
(5): Conv2d(128, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
)
(dropout): Dropout(p=0, inplace=False)
)
(1): _DenseLayer(
(dense_layer): Sequential(
(0): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(1): ReLU(inplace=True)
(2): Conv2d(96, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(4): ReLU(inplace=True)
(5): Conv2d(128, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
)
(dropout): Dropout(p=0, inplace=False)
)
(2): _DenseLayer(
(dense_layer): Sequential(
(0): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(1): ReLU(inplace=True)
(2): Conv2d(128, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(4): ReLU(inplace=True)
(5): Conv2d(128, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
)
(dropout): Dropout(p=0, inplace=False)
)
(3): _DenseLayer(
(dense_layer): Sequential(
(0): BatchNorm2d(160, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(1): ReLU(inplace=True)
(2): Conv2d(160, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(4): ReLU(inplace=True)
(5): Conv2d(128, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
)
(dropout): Dropout(p=0, inplace=False)
)
(4): _DenseLayer(
(dense_layer): Sequential(
(0): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(1): ReLU(inplace=True)
(2): Conv2d(192, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(4): ReLU(inplace=True)
(5): Conv2d(128, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
)
(dropout): Dropout(p=0, inplace=False)
)
(5): _DenseLayer(
(dense_layer): Sequential(
(0): BatchNorm2d(224, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(1): ReLU(inplace=True)
(2): Conv2d(224, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(4): ReLU(inplace=True)
(5): Conv2d(128, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
)
(dropout): Dropout(p=0, inplace=False)
)
)
)
(transition1): _TransitionLayer(
(transition_layer): Sequential(
(0): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(1): ReLU(inplace=True)
(2): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): AvgPool2d(kernel_size=2, stride=2, padding=0)
)
)
)
另一种方法是使用get_graph_node_names函数,效果如下:第一个x是输入
['x', 'convblock1.layers.0', 'convblock1.layers.1', 'convblock1.layers.2', 'layer1.layers.0.dense_layer.0', 'layer1.layers.0.dense_layer.1', 'layer1.layers.0.dense_layer.2', 'layer1.layers.0.dense_layer.3', 'layer1.layers.0.dense_layer.4', 'layer1.layers.0.dense_layer.5', 'layer1.layers.0.cat', 'layer1.layers.1.dense_layer.0', 'layer1.layers.1.dense_layer.1', 'layer1.layers.1.dense_layer.2', 'layer1.layers.1.dense_layer.3', 'layer1.layers.1.dense_layer.4', 'layer1.layers.1.dense_layer.5', 'layer1.layers.1.cat', 'layer1.layers.2.dense_layer.0', 'layer1.layers.2.dense_layer.1', 'layer1.layers.2.dense_layer.2', 'layer1.layers.2.dense_layer.3', 'layer1.layers.2.dense_layer.4', 'layer1.layers.2.dense_layer.5', 'layer1.layers.2.cat', 'layer1.layers.3.dense_layer.0', 'layer1.layers.3.dense_layer.1', 'layer1.layers.3.dense_layer.2', 'layer1.layers.3.dense_layer.3', 'layer1.layers.3.dense_layer.4', 'layer1.layers.3.dense_layer.5', 'layer1.layers.3.cat', 'layer1.layers.4.dense_layer.0', 'layer1.layers.4.dense_layer.1', 'layer1.layers.4.dense_layer.2', 'layer1.layers.4.dense_layer.3', 'layer1.layers.4.dense_layer.4', 'layer1.layers.4.dense_layer.5', 'layer1.layers.4.cat', 'layer1.layers.5.dense_layer.0', 'layer1.layers.5.dense_layer.1', 'layer1.layers.5.dense_layer.2', 'layer1.layers.5.dense_layer.3', 'layer1.layers.5.dense_layer.4', 'layer1.layers.5.dense_layer.5', 'layer1.layers.5.cat', 'transition1.transition_layer.0', 'transition1.transition_layer.1', 'transition1.transition_layer.2', 'transition1.transition_layer.3']
四、存在的主要问题
1. 训练时,loss在下降,但是时间在震荡,考虑是设计的损失函数出现的问题吗?
之前正常情况下,每个epoch的时间是不会有太大变化。跑实验时由最初的4min20s,到4min52s。
2. 测试:在生成图片时突然停止,发生报错:Fail to allocate bitmap。
原因:内存不足。问题的原因应该是plt.show()虽然没显示,但还是会占用内存。
解决办法:在引用的地方加上:
import matplotlib
matplotlib.use("Agg")
重新运行,没有再终止了
3. 训练结束无法展示png图片。UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure. plt.show()
——出现的问题是上面一个问题导致的,show.py文件中终端被修改成了Agg(非交互式)。全部修改成TkAgg(交互式)。
4. 如何设计出一个较好的损失函数?
五、下一步计划
原计划7.17交论文初稿,因为实验的原因,需要延后。
还需要测学习率、CurveVelA数据集,测完后准备在工作站跑大实验。
思考动机:网络、损失函数为什么要这样设计。
原文地址:https://blog.csdn.net/m0_56382522/article/details/140279136
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!