风过空庭,字句正徐来。
本站隐私政策/Privacy状态监控
@Do1e关于邮箱GitHubBangumi照片墙Scholar
友链Blogroll影汛创新
© 2024/11/22 ~ 2026/3/16 Do1e. | RSS 订阅 | 站点地图 | |
只有特别的你正在浏览本站~
Powered by Mix Space&
白い
.
| 苏ICP备2024146330号-1 | 苏公网安备32011302322471号
且听风定,再看句成。
日常

科研犯蠢小记2

w多云w伤心w150w2ww
AI·GEN

AI 生成的摘要

科研犯蠢小记2

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • 项目做得越来越大之后,直接在原先代码上加入新功能是真的会引入越来越多的bug啊。今天一天内发现两个相似的bug,实在是太可恶了!

    kernel_size 与 stride 并不一一对应

    之前代码定义的模型中,nn.Conv2d的 kernelsize 和 stride 一一对应。但是拓展后的模型有一层不符合之前写的对应规则,导致根据 kernelsize 给 stride 赋值的代码直接出了问题。

    要不是今天突然写了个assert判断 shape 估计这辈子都不会发现。

    PYTHON
    if kernel_size == 3:
        padding = 1
        stride = 1
    elif kernel_size == 5:
        padding = 2
        stride = 2
    else:
        raise ValueError()
    

    并非所有卷积后面都有ReLU

    之间模型中的每一层卷积后面都跟着一个nn.ReLU。但是为了适配新的分辨率要求,设计了一个转换层,它后面并没有nn.ReLU,它的名称规则和之前的卷积相同。与此同时,在模拟计算时,之前写的判断规则直接出错了。o( ̄┰ ̄*)ゞ

    DIFF
    -if quant.startswith('classifier_conv'):
    +if quant.startswith('classifier_conv') and quant != 'classifier_conv_transfer':
        x[x < 0] = 0
    

    总之,今天发现的两个bug都是从原先代码迁移过来加了点东西,结果判断条件失误。这些问题似乎又没有办法避免,除非在一开始就设计一个可拓展性好的架构,但一开始怎么能意识到之后可能出现的问题呢?做科研又不是做产品,过一段时间就有新的想法,感觉就更不可能考虑那么多了。