Tensorflow GradientTape 间歇性地出现“变量不存在梯度”

2024-01-13

在训练我的网络时,我偶尔会遇到警告:

W0722 11:47:35.101842 140641577297728 optimizer_v2.py:928] Gradients does not exist for variables ['model/conv1d_x/Variable:0'] when minimizing the loss.

这种情况偶尔会偶尔发生(可能每 20 个成功步骤中就会发生一次)。我的模型基本上有两条路径,它们通过网络中不同位置的串联连接在一起。为了说明这一点,这里有一个简单的例子来说明我的意思。

class myModel(tf.keras.Model):

  def __init__(self):

    self.conv1 = Conv2D(32)
    self.conv2 = Conv2D(32)
    self.conv3 = Conv2D(16)

  def call(self, inputs):

    net1 = self.conv1(inputs)
    net2 = self.conv2(inputs)
    net = tf.concat([net1, net2], axis=2)
    net = self.conv3(net)
    end_points = tf.nn.softmax(net)

model = myModel()

with tf.GradientTape() as tape:

  predicition = model(image)
  loss = myloss(labels, prediction)

gradients = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables))

实际上,我的网络要大得多,但通常没有梯度的变量往往是网络顶部的变量。在每个之前Conv2D我也有一个自定义渐变层。有时,当出现错误时,我可以注意到该层的梯度函数尚未被调用。

我的问题是,梯度磁带在通过我的网络向后传播时,有时会采取看似不同的路径。我的第二个问题是,这是由于我的网络有两条单独的路由(即 conv1 和 conv2)引起的。这个网络架构是否存在根本缺陷?

理想情况下,我可以定义为GradientTape()它必须找到每个顶层的梯度?


Nguyễn 和 gkennos 给出的解决方案将抑制错误,因为它将替换所有None由零。 然而,一个大问题是你的梯度在任何时间点都为空。 上述问题肯定是由unconnected variables(默认情况下 PyTorch 会抛出运行时错误)。

最常见的不连接层的情况可以举例如下:

 def some_func(x):
       x1 = x * some variables
       x2 = x1 + some variables #x2 discontinued after here
       x3 = x1 / some variables
       return x3

现在观察一下x2未连接,因此梯度不会被传播。仔细调试代码中未连接的变量。

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

Tensorflow GradientTape 间歇性地出现“变量不存在梯度” 的相关文章

随机推荐

  • 明白ES6中数组的区别了吗?

    所以我有两个数组 const allLanguages ES EN DE const usedLanguages id 1 lang EN 生成新数组的最快方法是什么 这两者之间有什么区别 在老式的 JavaScript 中 你必须在另一个
  • Android 中的图像视图上的文本叠加

    我正在尝试将文本视图覆盖在图像视图上 像这样的东西 有人可以帮我解决代码吗 将TextView和ImageView包裹到FrameLayout中 将TextView放在FrameLayout中ImageView之后 然后 将 FrameLa
  • debounce 不适用于 Angular 中的 keyup 事件

    我有一个text box输入一些文本来搜索记录 我在用data ng model options debounce 1000 with keyup event data ng model options 工作正常 但我想解雇keyup事件之
  • 删除特定列中第一次出现 NaN 后的所有行(pandas)

    我正在尝试使用 pandas 中的 dropna 函数 我想将它用于特定的列 如果所有行都有所有 NaN 值 我只能弄清楚如何使用它来删除 NaN 我有一个数据框 见下文 我想在第一次出现 NaN 后删除所有行specific列 A 列 当
  • AWK:使用正则表达式缩短 if-then-else

    AWK 格式如下 REGEX Action 将执行Action如果当前行匹配REGEX 有没有办法添加一个else子句 如果当前行与正则表达式不匹配 则将执行该子句 而不显式使用 if then else 如下所示 REGEX Action
  • C 是否对浮点常量进行舍入

    关于Go中浮点精度的一个问题 https stackoverflow com questions 22337418 golang floating point precision float32 vs float64让我想知道C是如何处理这
  • 如何在VB.Net面板中获取滚动条?

    我正在 VB Net 中开发 Windows 应用程序 在这种情况下 有一种情况 有一个表单 在该表单中有一个面板 面板内有一个富文本框 所以我的要求是在面板中获得一个滚动条 因此 当用户在面板上滚动时 富文本框可以像 MS Office
  • JSONP 调用显示“未捕获的语法错误:意外的标记:”

    这是我的代码 ajax url https api flightstats com flex schedules rest v1 json flight AA 100 departing 2013 10 4 appId 19d57e69 a
  • 如何使用 SoapClient 类进行 PHP SOAP 调用

    我习惯于编写 PHP 代码 但不经常使用面向对象的编码 我现在需要与 SOAP 交互 作为客户端 但无法获得正确的语法 我有一个 WSDL 文件 它允许我使用 SoapClient 类正确设置新连接 但是 我无法真正做出正确的调用并获取返回
  • NSNumberFormatter 前导 0 和小数

    有什么方法可以格式化带有前导 0 和小数的 NSNumber 吗 例如 我需要能够写 4 5 和 000 目前我拥有它 它允许小数 但不允许前导 0 NSNumberFormatter f NSNumberFormatter alloc i
  • 用C#改变单元格的背景

    我正在开发一个使用 C 来操作 Excel 文档的程序 并且我正在使用 Microsoft Office Interop Excel Worksheet worksheet 当我将某些内容插入 x y 单元格时 我使用 worksheet
  • 在 free() 后将指针设置为 NULL 总是一个好习惯吗? [复制]

    这个问题在这里已经有答案了 可能的重复 释放后将变量设置为 NULL https stackoverflow com questions 1025589 setting variable to null after free 我正在学习良好
  • java.exe 的服务器选项

    服务器热点和客户端热点有什么区别 有什么理由将生产环境切换到 server 请分享您的实践经验 有性能提升吗 与 Oracle UCM 10g 相关 是的 可以有一个huge在某些情况下性能提升 在对我的 Protocol Buffers
  • 在java中设置代理

    我创建了一项通过互联网发布内容的服务 一切都很好 但是当我将其部署到我们的服务器时 我得到连接状态 403 禁止 我认为这是因为我们的服务器不允许在未先登录的情况下直接访问互联网 我们必须首先使用我们的用户名 密码在浏览器中登录才能访问互联
  • 通过地址栏加载远程 JavaScript 文件

    是否可以从地址栏加载远程 JavaScript 文件 我一直试图将其放入地址栏 javascript src http depot com file js funcname 我不会用它来做坏事 我只是测试我的网站 仅此而已 如果你想保护你的
  • 如何将 javaw.exe 控制台输出重定向到日志文件?

    我想从批处理文件启动我的 Java 程序 这是我想用来启动应用程序的脚本 但问题是我无法将控制台输出重定向到日志文件 任何人都可以提供任何提示 而无需编辑任何代码 并使用 Java 命令行选项或其他东西吗 echo off set TASK
  • 如何在不换行的情况下打印完整的 NumPy 数组(在 Jupyter Notebook 中)

    这个问题与这个问题不同 如何打印完整的 NumPy 数组而不截断 https stackoverflow com questions 1987694 how to print the full numpy array without tru
  • Android Studio 在 M1 Apple Silicon 芯片上非常滞后

    我已从第 7 代升级到 M1 芯片 2020 Macbook Air 英特尔芯片电脑 总的来说 我对此感到非常高兴和满意 但当谈到我经常使用的 Android Studio 性能时 我很抱歉地说 非常令人失望 Apple Silicon 兼
  • 如何在 Android 上的 ListActivity 中实现上下文菜单?

    如何实现通过长按或点击使用内置布局和 ListAdapter 的 ListActivity 触发的上下文菜单 在 onCreate 方法调用上注册上下文菜单 http developer android com reference andr
  • Tensorflow GradientTape 间歇性地出现“变量不存在梯度”

    在训练我的网络时 我偶尔会遇到警告 W0722 11 47 35 101842 140641577297728 optimizer v2 py 928 Gradients does not exist for variables model