首页 Paddle框架 帖子详情
网络结构创建顺序影响结果
收藏
快速回复
Paddle框架 问答模型训练 242 3
网络结构创建顺序影响结果
收藏
快速回复
Paddle框架 问答模型训练 242 3

我最近在写一个程序,很简单的一个模型

网络结构:backbone + CBAM + classifier

发现一个很震惊的事情

 

在model的__init__中 分别按照       backbone、CBAM、classifier    的顺序创建        和   backbone、classifer、CBAM     的顺序创建,

即         self.cbam=CBAM(channel)                                                       self.classifier=nn.Sequential(nn.Conv2D ...)

            self.classifier=nn.Sequential(nn.Conv2D ...)                              self.cbam=CBAM(channel)

forward中代码一致,其他文件也均一致,

训练时的seed固定,设置FLAGS_cudnn_deterministic为True

两次训练除了model__init__中顺序不一致其他均一致,最后训练出来的结果竟然不一致

 

有大佬可以解惑吗?

0
收藏
回复
全部评论(3)
时间顺序
李长安
#2 回复于2022-11

这是个问题,提个issue问问呢

0
回复
L
Linq1呀
#3 回复于2022-11
这是个问题,提个issue问问呢

我又去pytorch试了一下,发现pytorch也是两次结果不一样的,我猜可能是因为 

 

所有随机数种子都固定了,生成的一系列数是固定的,导致构成整个模型权重的数固定

假设CBAM的权重为1000个数,classfier的权重为500个数,

按backbone+CBAM+classifier的顺序生成的网络中     CBAM权重由前1000个数组成,classifier权重由后500个数组成

按backbone+classifier+CBAM的顺序生成的网络中     CBAM权重由后1000个数组成,classifier权重由前500个数组成

这样导致了两次生成的CBAM和classifier权重    是不同的,从而导致了网络结果不同

 

举个例子来说,假设随机数种子固定后生成的三个随机数是4、5、6,

若按照a、b、c的顺序来生成这三个数,a、b、c的值分别为4、5、6,      x=[a,b,c],               x的值就成了[4,5,6]

而按照a、c、b的顺序来生成这三个数,a、b、c的值分别为4、6、5,      x=[a,b,c],               x的值就成了[4,6,5]

0
回复
nkufdu
#4 回复于2022-11

我也碰到过

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户