我有一个变量inps,它是1024*3*78的Tensor数据类型 然后我用sa_encodings = [encoder(inp) for encoder, inp in zip(self.critic_encoders, inps)]代码进行处理 self.critic_encoders=nn.ModuleList() 定义方法是 encoder.add_module('enc_bn', nn.BatchNorm1d(idim, affine=False)) encoder.add_module('enc_fc1', nn.Linear(idim, hidden_dim)) encoder.add_module('enc_nl', nn.LeakyReLU()) self.critic_encoders.append(encoder) 其中,idim定义为78 以上定义方法有错吗?若没错,我运行时为什么会报以下错误: RuntimeError: running_mean should contain 3 elements not 78 有需要添加的代码吗?
时间: 2023-06-16 11:06:51 浏览: 113
tensor_toolbox.zip_TensorToolbox_tensor_tensor toolbox _tensor_t
5星 · 资源好评率100%
根据您提供的代码,问题可能出在BatchNorm1d层的使用上。BatchNorm1d默认对最后一维进行归一化,因此在这种情况下,您需要将idim指定为3,而不是78。修改idim后,您的代码应该像这样:
```
idim = 3
encoder.add_module('enc_bn', nn.BatchNorm1d(idim, affine=False))
encoder.add_module('enc_fc1', nn.Linear(idim, hidden_dim))
encoder.add_module('enc_nl', nn.LeakyReLU())
self.critic_encoders.append(encoder)
sa_encodings = [encoder(inp.transpose(1, 2)) for encoder, inp in zip(self.critic_encoders, inps)]
```
此外,您还需要在调用encoder之前将数据的维度从(1024, 3, 78)转换为(1024, 78, 3),以便BatchNorm1d对正确的维度进行归一化。
阅读全文