Bootstrap

【报错】训练参数不更新

待训练的参数只有某一维度更新,其余维度均不更新,debug看grad,发现其他维度的梯度全是0。有两种可能,要么梯度消失,这种通过调参可以解决;要么就是其他维度根本不参与loss的计算。

我一开始以为是调参的问题,当时loss是先升后降的,试了改动学习率(改小/使用可变学习率),发现还是完全不改变。

仔细debug,发现当channel才循环到1时,feature_map后面的channel的数值已经被更新了,也就是说,除了最后一次循环最后一次更新,前面的循环都是无效的,印证了我的猜想。

但是为什么呢?

=》在上面我的代码中利用expand去扩展维度了,然而expand 不会复制数据,而是返回一个视图(view),因此不会占用额外的内存。我需要一个独立的副本,需要使用 repeat 方法。

至此,我需要训练的变量就能正常更新了。
(但是突然发现好笨 为什么不一开始就设置创建大小为B,C,H,W呢?仔细想了下发现是因为需求变了,以前所有channel都默认0的,所有在创建完feature_mask之后再扩展问题也不大,但现在需要训每个channel的baseline就不能这么搞了)

;