pytorch 踩坑

pytorch 踩坑

在pytorch中,如果你定义了没用的组件,同样也会影响你的模型(我也不知道从哪里影响的),看一个例子

python 复制代码
    def _make_layer(self, block, planes, blocks, stride=1, dilate=False):
        norm_layer = self._norm_layer
        #downsample = None
        previous_dilation = self.dilation
        if dilate:
            self.dilation *= stride
            stride = 1
        # if stride != 1 or self.inplanes != planes:
        #     downsample = layer.SeqToANNContainer(
        #             nn.Conv2d(self.inplanes, planes, kernel_size=1, stride=stride),
        #             norm_layer(planes),
        #         )

        layers = []
        layers.append(block(self.inplanes, planes, stride
                            ))
        self.inplanes = planes 
        for _ in range(1, blocks):
            layers.append(block(self.inplanes, planes
                                ))

        return nn.Sequential(*layers)

这是传统的一个_make_layer,可以看到我把其中的downsample给注释掉了,他其实是个没用的组件,我之前也没管它,我没注释前,第一个epoch

注释后

就是他其实是不参与整体模型的,但是就是会影响,我估计是影响整体模型的初始化啥的了?说不定到最后等模型收敛了结果会是差不多的。。这里我就不验证了,如果有大神看到的话可以验证一下告诉我结果,感谢!!

动机是因为,我自己写了个pytorch网络结构,然后我想写成大家都在写的这种格式,就是都封装起来,结果我发现模型结构一样,为什么两个跑的结果不一样呢,初始化和随机种子我都设置了,于是我就想去找到底哪里有问题,后面就一步步的发现了这个问题,怎么说呢,虽然最后两边的结果还是有差异,但是不多,可能还是因为一些组件的定义、组件的顺序、以及其他很小的因素都会有影响,因此在这里劝大家代码还是要写规范,这样才和别人的baseline有的比~

我一天都在调这个bug,我就在想,两个同样结构的网络,我设置了同样的随机种子和初始化,怎么会结果不同呢?

经过我一天的实验发现,你网络层定义的位置,是否创建这个网络层,都会对结果有影响,例如,如果我的downsample是通过函数传递给basicblock和我直接在函数里定义downsample,那么这样跑出来的结果还是不一样,经过两个downsample定义的方式是一样的

最后希望大家不要想我一样硬钻牛角尖,因为这样其实到头来发现不是模型的问题而是本身pytorch的问题感觉有些浪费时间,但又希望大家可以适当的钻牛角尖,毕竟一切的结果都来源于大家的坚持

相关推荐
jndingxin16 分钟前
OpenCV CUDA模块设备层-----高效地计算两个 uint 类型值的带权重平均值
人工智能·opencv·计算机视觉
Sweet锦26 分钟前
零基础保姆级本地化部署文心大模型4.5开源系列
人工智能·语言模型·文心一言
笑稀了的野生俊1 小时前
在服务器中下载 HuggingFace 模型:终极指南
linux·服务器·python·bash·gpu算力
Naiva1 小时前
【小技巧】Python+PyCharm IDE 配置解释器出错,环境配置不完整或不兼容。(小智AI、MCP、聚合数据、实时新闻查询、NBA赛事查询)
ide·python·pycharm
hie988941 小时前
MATLAB锂离子电池伪二维(P2D)模型实现
人工智能·算法·matlab
晨同学03271 小时前
opencv的颜色通道问题 & rgb & bgr
人工智能·opencv·计算机视觉
路来了1 小时前
Python小工具之PDF合并
开发语言·windows·python
蓝婷儿2 小时前
Python 机器学习核心入门与实战进阶 Day 3 - 决策树 & 随机森林模型实战
人工智能·python·机器学习
大千AI助手2 小时前
PageRank:互联网的马尔可夫链平衡态
人工智能·机器学习·贝叶斯·mc·pagerank·条件概率·马尔科夫链
AntBlack2 小时前
拖了五个月 ,不当韭菜体验版算是正式发布了
前端·后端·python