如何为 pytorch 图层指定名称?

2023-12-29

下列的上一个问题 https://stackoverflow.com/questions/66137298/how-to-detect-source-of-under-fitting-and-vanishing-gradients-in-pytorch,我想绘制权重、偏差、激活和梯度以获得与以下类似的结果this https://stackoverflow.com/questions/42315202/understanding-tensorboard-weight-histograms.

Using

for name, param in model.named_parameters():
    summary_writer.add_histogram(f'{name}.grad', param.grad, step_index)

正如所建议的上一个问题 https://stackoverflow.com/questions/66137298/how-to-detect-source-of-under-fitting-and-vanishing-gradients-in-pytorch给出次优结果,因为图层名称类似于'_decoder._decoder.4.weight',这很难遵循,特别是因为架构因研究而发生变化。4这一次的运行在下一次不会是一样的,而且真的毫无意义。

因此,我想为每一层赋予我自己的字符串名称。


I found this https://discuss.pytorch.org/t/how-to-give-pytorch-layer-a-name/5521Pytorch 论坛讨论,但没有就任何最佳实践达成一致。

为 Pytorch 层分配名称的推荐方法是什么?

即,以各种方式定义的层:

  1. 顺序:
self._seq = nn.Sequential(nn.Linear(1, 2), nn.Linear(3, 4),)
  1. Dynamic:
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,),)
  1. Direct:
self._direct = nn.Linear(7, 8)
  1. 其他我没想到的方式

我希望能够为每个层提供一个字符串名称,以上述每种方式定义。


顺序

传递一个实例集合.OrderedDict https://docs.python.org/3/library/collections.html#collections.OrderedDict。下面的代码给出conv1.weights, conv1.bias, conv2.weight, conv2.bias(注意缺少torch.nn.ReLU(),请参阅此答案的末尾)。

import collections

import torch

model = torch.nn.Sequential(
    collections.OrderedDict(
        [
            ("conv1", torch.nn.Conv2d(1, 20, 5)),
            ("relu1", torch.nn.ReLU()),
            ("conv2", torch.nn.Conv2d(20, 64, 5)),
            ("relu2", torch.nn.ReLU()),
        ]
    )
)

for name, param in model.named_parameters():
    print(name)

Dynamic

Use ModuleDict https://pytorch.org/docs/stable/generated/torch.nn.ModuleDict.html代替ModuleList:

class MyModule(torch.nn.Module):
    def __init__(self):
        super().__init__()
        self.whatever = torch.nn.ModuleDict(
            {f"my_name{i}": torch.nn.Conv2d(10, 10, 3) for i in range(5)}
        )

会给我们whatever.my_name{i}.weight (or bias)对于每个动态创建的模块。

Direct

只要你想怎么命名就可以了,这就是它的命名方式

self.my_name_or_whatever = nn.Linear(7, 8)

你没有想过

  • 如果你想绘制权重、偏差及其梯度,你可以沿着这条路线走
  • 您无法绘制激活图这样(或激活的输出)。使用PyTorch 挂钩 https://pytorch.org/tutorials/beginner/former_torchies/nnft_tutorial.html#forward-and-backward-function-hooks相反(如果你想要每层梯度通过网络时也使用这个)

对于最后一个任务,您可以使用第三方库火炬函数 https://github.com/szymonmaszke/torchfunc(免责声明:我是作者)或者直接去写你自己的钩子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 pytorch 图层指定名称? 的相关文章

随机推荐

  • gcloud 命令突然根本不起作用

    All gcloud命令突然给出这个错误 错误 gcloud 加载失败 没有名为 google appengine ext 的模块 这通常表明您的 gcloud 安装或 你的Python解释器有问题 请验证以下是否是有效的 Python 2
  • 如何在 Clojure 中使用 definterface?

    Clojure 1 2 0 似乎有一个definterface形式 显然是为了创建 Java 接口 有些人建议使用它 例如 一个答案这个数字运算问题 https stackoverflow com questions 3124344 clo
  • 当 xsl 本身第一页就足够时避免第二页

    我已经找到了问题的解决方案 要感谢你们所有人 因为如果没有你们及时的解决方案和建议 这是不可能实现和解决的 非常感谢 这个问题的解决方案已经实现 非常感谢 要解决您的问题 请将以下所有内容保留在单个表中并将其添加到表标题中 参考您的 xsl
  • JavaScript 正则表达式捕获小数点的重复部分

    寻找最佳方法来获取具有可能重复的小数部分的任意数字 并发现重复部分 如果存在 最终 我需要用上划线符号 使用 css 文本装饰或 MathML mline 来装饰数字 所以我还需要知道重复开始的索引 所以我需要正则表达式来得到 或者可以在算
  • 无法将有序数据写入 Spark 中的镶木地板

    我正在使用 Apache Spark 生成镶木地板文件 我可以按日期对它们进行分区 没有任何问题 但在内部我似乎无法按正确的顺序排列数据 在处理过程中顺序似乎丢失了 这意味着镶木地板元数据不正确 具体来说 我想确保镶木地板行组反映排序顺序
  • 将回归结果输出到 R 中的数据帧中

    我想知道是否有任何命令可以将 lm 模型的结果输出到 R 中的数据帧中 就像 SAS 中的 outest 一样 有任何想法吗 我正在运行多个模型 我希望结果如下所示 Model alpha Beta Rsquared F df model0
  • 为什么 BigQuery 加载作业统计信息会返回查询信息?

    我们有一些加载作业 可以从 GCS 中获取文件 并将它们加载到 BigQuery 中进行分析 我们使用JobConfigurationLoad class https developers google com resources api
  • Android:将sqlite数据库内容加载到webview

    我有一个sqlite我有一个要加载的内容的数据库webview 如我所愿从数据库中选择并在网页视图中显示 有什么办法可以做到吗 public class TataworatYawmeeh extends Activity WebView w
  • 共享内存与 Go 通道通信

    Go 的口号之一是不要通过共享内存进行通信 相反 通过通信来共享内存 http golang org doc effective go html concurrency 我想知道 Go 是否允许在同一台机器上运行的两个不同的 Go 编译的二
  • Jupyter python3笔记本无法识别pandas

    我正在使用 Jupyter 笔记本并选择了 Python 3 在单元格的第一行我输入 import pandas as pd 我从笔记本中得到的错误是 ImportError 没有名为 pandas 的模块 如何将pandas安装到jupy
  • 使用 matplotlib 设置网络中的动态节点形状

    第一次在这里发帖 请大家多多包涵 我正在尝试在 Networkx 中绘制不同类型的字符网络 并希望为每种类型设置不同的节点形状 例如 我希望角色是圆形 生物是三角形等 我已经尝试了几个小时来解决这个问题并进行了广泛的搜索 但我还没有找到一种
  • 如何验证自签名认证

    我会清楚地向您提供我的问题 以便您可以回答我 我有一个使用 SslStream 保护的客户端 服务器 套接字 连接 据我所知 使用 ssl 确保我的客户端只会连接到我的服务器 为此 我必须向客户端添加一个函数来验证服务器认证并确保服务器是真
  • ClassNotFoundException,在运行 Hadoop 示例作业时

    我已经开始做一些关于 hadoop 的事情了 它已设置并正常运行 现在我正在做一个单节点 独立集群 我正在尝试运行示例作业 如上面提到的http hadoop apache org common docs r0 18 3 mapred tu
  • 干预图片圆角上传

    我正在尝试将文件上传为圆圈 但无法使其工作 我看过一些有关对图像应用蒙版的主题 但是当我应用蒙版时 它需要很长时间并且服务器会关闭请求 我正在使用Intervention ImageLaravel 的库 我的代码如下 identifier
  • ANR keyDispatchingTimedOut 错误

    当我尝试使用 DOM 解析 RSS 时 我在我的应用程序中遇到了强制向下错误 但是 这并不总是强制向下问题 这是 logcat ANR keyDispatchingTimedOut DALVIK THREADS main prio 5 ti
  • iOS 中接收到 APNS 时打开视图控制器

    嘿 我是 iPhone 新手 我一直在尝试使用 Apple 推送通知 基本上 我想要做的是 当用户单击收到的推送通知消息时 我需要打开一个特定的视图控制器 我已将带有关键参数 type 的自定义数据添加到我的负载 JSON 中 因此代表通知
  • Dagger2 继承的子组件多重绑定

    希望经过日复一日的研究这个非常感兴趣的主题 继承的子组件 后在这里找到一些帮助multibindings你可以在这里找到继承的子组件多重绑定 https dagger dev multibindings这是该页面的最后一个主题 根据官方文档
  • Windows通用应用程序无需网络即可连续听写

    按照此处提供的示例 https github com Microsoft Windows universal samples https github com Microsoft Windows universal samples很好地概述
  • 使用钢筋时的常见测试覆盖报告

    我有一个使用 Rebar 的 Erlang 应用程序 并且有使用 Common Test 编写的测试 我想查看这些测试的测试覆盖率报告 因此我在我的rebar config file cover enabled true 然而 通用测试报告
  • 如何为 pytorch 图层指定名称?

    下列的上一个问题 https stackoverflow com questions 66137298 how to detect source of under fitting and vanishing gradients in pyt