【发布时间】:2021-05-15 01:51:54
【问题描述】:
在a previous question 之后,我想绘制权重、偏差、激活和梯度以达到与this 相似的结果。
使用
for name, param in model.named_parameters():
summary_writer.add_histogram(f'{name}.grad', param.grad, step_index)
正如the previous question 中所建议的那样,给出了次优结果,因为层名称与'_decoder._decoder.4.weight' 相似,这很难理解,尤其是由于研究正在改变架构。 4这一次跑,下一次就不一样了,真的没意义。
因此,我想为每一层赋予我自己的字符串名称。
我发现this Pytorch 论坛讨论,但没有达成一致的最佳实践。
为 Pytorch 层分配名称的推荐方法是什么?
即,以各种方式定义的层:
- 顺序:
self._seq = nn.Sequential(nn.Linear(1, 2), nn.Linear(3, 4),)
- 动态:
self._dynamic = nn.ModuleList()
for _ in range(self._n_features):
self._last_layer.append(nn.Conv1d(in_channels=5, out_channels=6, kernel_size=3, stride=1, padding=1,),)
- 直接:
self._direct = nn.Linear(7, 8)
- 其他我没想到的方式
我希望能够为每个层提供一个字符串名称,以上述每种方式定义。
【问题讨论】:
-
对于
nn.Sequential,您可以提供nn.Modules的OrderedDict,从而为它们命名
标签: python machine-learning deep-learning neural-network pytorch