这是我的代码,“ x”是大小为(out_c,in_c,k_h,k_w)的常规CNN权重,其中 out_c 也是CNN内核的数量。 lb (下界)和 ub (上键)是两个预定义的一维numpy数组,长度为 out_c 。
任务是确保所有CNN内核权重的值在 lb 和 ub (即 lb [i] < / strong> < x [i,:,:,:] < ub [i] ,0 <= i < out_c ),剪裁所有异常值。 此外,我需要保留离群值遮罩以用于其他用途。
但是,我找不到一个完全向量化的解决方案,因此不涉及for循环。我正在使用Pytorch 0.3.1,有什么方法可以使此代码段完全矢量化(摆脱for循环)?谢谢。
N = x.size(0) # number of cnn kernel
lower_mask = []
upper_mask = []
for i in range(N):
lower_mask.append(x[i] < lb.tolist()[i])
upper_mask.append(ub.tolist()[i] < x[i])
x[i].clamp_(lb.tolist()[i], ub.tolist()[i])
lower_mask = torch.stack(lower_mask).cuda()
upper_mask = torch.stack(upper_mask).cuda()