Torch CAddTable.output 是错误的:仅保留值为 0 和 1

我想在使用预先训练的 ResNet 进行前向传递后获得每层的激活。对于大多数层,我可以使用模块的输出参数来查询激活,然而对于 CAddTable,输出参数仅包含值为 0 或 1,对应于前向传递期间真实输出的符号。CAddTable 后面的 ReLU 单元保持非整数值,表明在前向传递期间,CAddTable 返回了正确的值。

例如,对于单个特征映射,我有两个输入到 CAddTable 中:

输入1:

(1,1,.,.) =
 -0.4010 -0.4658 -0.2517 -0.2863 -0.2731 -0.3428 -0.2685
 -1.1177 -1.3387 -0.7699 -0.5595 -0.5505 -0.7473 -0.6121
 -1.7965 -1.8100 -0.7766 -0.2923 -0.2297 -0.8788 -0.9094
 -1.5759 -0.7506  0.5790  0.8329  0.0072 -1.5523 -1.5252
  0.1142  1.1772  1.6391  1.2629 -0.2074 -2.1833 -1.9419
  0.9352  1.8757  1.5200  0.8178 -0.5817 -2.1865 -1.7899
  1.1880  2.0332  1.3987  0.3307 -1.0040 -2.0327 -1.5910
[torch.CudaTensor of size 1x1x7x7]

输入2:

(1,1,.,.) =
  0.0000  0.0000  0.1688  0.0000  0.0000  0.0000  0.0000
  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
  1.1719  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
  2.3147  0.0000  0.0000  0.0000  0.0000  0.0000  0.6100
  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
  1.0300  0.4141  1.2499  0.1507  0.0000  0.0000  0.0000
  3.0425  1.5787  0.5076  0.7407  0.8804  0.0000  0.0000
[torch.CudaTensor of size 1x1x7x7]

CAddTable 的输出(我期望这是输入之和,但实际上它有点像输入之和的单位阶跃函数)

(1,1,.,.) =
  0  0  0  0  0  0  0
  0  0  0  0  0  0  0
  0  0  0  0  0  0  0
  1  0  1  1  1  0  0
  1  1  1  1  0  0  0
  1  1  1  1  0  0  0
  1  1  1  1  0  0  0
[torch.CudaTensor of size 1x1x7x7]

CAddTable 后面的 ReLU 单元的输出

(1,1,.,.) =
  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
  0.7388  0.0000  0.5790  0.8329  0.0072  0.0000  0.0000
  0.1142  1.1772  1.6391  1.2629  0.0000  0.0000  0.0000
  1.9651  2.2899  2.7700  0.9686  0.0000  0.0000  0.0000
  4.2305  3.6119  1.9063  1.0714  0.0000  0.0000  0.0000
[torch.CudaTensor of size 1x1x7x7]

有人知道为什么会发生这种情况吗?

点赞