2024 3.23~3.29周报

上周工作

SVInvNet论文研读

本周计划

加入DenseNet,修改网络架构,跑代码

总结

DenseNet

  • 密集块:DenseNet将网络分成多个密集块(Dense Block)。在每个密集块内,每一层都连接到前面所有的层。这种跳跃连接有助于解决梯度消失问题,因为每一层都可以直接访问之前层的梯度信息,使得训练更加稳定。
  • 特征重用性:由于每一层都与前面所有层连接,网络可以自动地学习到更加丰富和复杂的特征表示。有助于提高网络的性能,同时减少了需要训练的参数数量。
  • 过渡层:在密集块之间,通常会使用过渡层来控制特征图的大小,从而减少计算量。

优点:

  • 网络可以更好地利用浅层特征信息,从而提高网络的性能。
  • 网络具有更强的特征重用能力,可以减少参数数量,降低过拟合风险。
  • 网络训练更加稳定,可以缓解梯度消失和梯度爆炸等问题。

实验1——引入密集连接在编码器部分

前期太混乱,没有把densenet代码理解透彻,密集快和过渡块他们的通道数和尺寸具体每一层是如何变化的

后面自己先计算了尺寸以及通道变化,因为密集块部分根据Bottleneck层数来改变通道数,过渡层(BN+ReLU+1×1Conv+2×2AvgPooling)是通道数减半并且尺寸减半。

  • 先采用(kernel_size=(7, 1), stride=(2, 1), padding=(3, 0)的卷积)将(,5,1000,70)变化到(,32,500,70),
  • 再使用三个(kernel_size=(3, 1), stride=(2, 1), padding=(1, 0)卷积)变化到(,64,63,70),使尺寸近似方形
  • 接着使用三个(密集块+过渡层),密集块层数是(6,12,8),变化到(,256,7,8)
  • 再使用卷积变化到(,512,1,1)
    self.convblock5 = ConvBlock(256, 512, kernel_size=(7, ceil(50 * sample_spatial/ 7)), padding=0)
  • 解码部分跟InversionNet一致,未做改变

数据集:curvevel-a

Epochs = 120
Trainsize = 5000 

ValSize = 500
Testsize = 500

TestBatchsize = 50
Batchsize = 64

但目前感觉网络架构有问题后续需要修改,比InversionNet一个epoch慢了1min。——因为DenseNet缺点有:

  • 要进行多次Concatenate操作,数据需要被复制多次,显存容易增加得很快,需要一定的显存优化技术。
  • 网络结构较为复杂,需要更多的计算资源和时间来训练。
  • 在一些应用场景下,由于特征传递的过多,会导致内存占用较大。

使用以下预训练模型进行测试:

PreModelname = 'InversionNet_DenseNet_TrainSize5000_Epoch120_BatchSize64_LR0.001_epoch200.pkl'

测试结果如下:第三行

 实验结果如下:

 

实验2——使用aba跑InversionNet

数据集:curvevel-a

Epochs = 120
Trainsize = 5000 

ValSize = 500
Testsize = 500

TestBatchsize = 50
Batchsize = 64

Trained model saved: 100 percent completed
Training complete in 41m  43s 

 测试结果如下:

 

后续跑24000再看看结果 

遇到的问题及解决

1.使用torchsummary时报错AttributeError: ‘list‘ object has no attribute ‘size‘:

查看torchsummary的源码,发现处理input的方法都是粗暴使用如下语句:

summary[m_key]["input_shape"] = list(input[0].size())

 修改后:

            # summary[m_key]["input_shape"] = list(input[0].size())
            if isinstance(input[0], torch.Tensor):
                summary[m_key]["input_shape"] = list(input[0].size())
            elif isinstance(input[0], list):
                summary[m_key]["input_shape"] = list(item.size() for item in input[0])

2.RuntimeError: Can't call numpy() on Tensor that requires grad. Use tensor.detach().numpy() instead.

原因:待转换类型的PyTorch Tensor变量带有梯度,直接将其转换为numpy数据将破坏计算图,因此numpy拒绝进行数据转换,实际上这是对开发者的一种提醒。如果自己在转换数据时不需要保留梯度信息,可以在变量转换之前添加detach()调用。

解决办法:

y.numpy() ---> y.detach().numpy()

3.RuntimeError: Given groups=1, weight of size [64, 3, 7, 7], expected input[10, 5, 1000, 70] to have 3 channels, but got 5 channels instead

原因:通道数不匹配 

4.TypeError: 'module' object is not callable

原因:Python导入模块的方法有两种——import module 和 from module import,区别是前者所有导入的东西使用时需加上模块名的限定,而后者不要。

5.UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.UserWarning: The parameter 'pretrained' is deprecated since 0.13 and may be removed in the future, please use 'weights' instead.解决办法 - 欣杰科技 - 博客园 (cnblogs.com)

6.TypeError: empty() received an invalid combination of arguments - got (tuple, dtype=NoneType, device=NoneType), but expected one of: 

原因:在python3中两个整型相除得到的是浮点型,例如:4/2=2.0,而在构建卷积时的参数要求时整型。

解决:传参时加上int转换:

  • 14
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值