自学内容网 自学内容网

2024 7.8~7.14 周报

一、上周工作

2024 7.1~7.7 周报-CSDN博客

二、本周计划

跑实验、机器学习、数学表达式

三、完成情况

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)!