问题标签 [gradienttape]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
74 浏览

python - Tensorflow 梯度磁带无法在冻结图上观察输入张量

我有一个使用 Tensorflow 对象检测 API 获得的冻结图。它是在 Tensorflow 1.X 上训练的 mobilnet SSD 模型的图表。

我想在此图上使用快速梯度符号法生成对抗性示例。冻结图的输入数据类型是 uint8 但由于梯度磁带无法观看 int 我将输入节点的数据类型更改为浮点数。我是新手,不确定我是否做的一切正确,我正在按照以下步骤操作,

  1. 在 TF2 中加载冻结图

  2. 将输入节点的数据类型更改为浮动,如下所示

  3. 将冻结图包装到 ConcreteFunctions

  4. 创建一个梯度磁带,让梯度磁带在使用冻结图进行推理时观看输入图像

有了这个,我得到了错误“AttributeError:'NoneType'对象没有属性'outer_context'”这将出现在下面的tensorflow函数中的节点'Postprocessor/BatchMultiClassNonMaxSuppression/map/while/Exit_2'

此操作所属的 while 上下文报告为 None。冻结图工作正常,如果我只是做简单的推理并要求梯度磁带不看任何东西,那么我会从图中得到输出。如果我在这里做错了什么,请帮助我。

我的最终目标是计算冻结图的输出与地面实况之间的损失,然后计算损失相对于实现 FGSM 所需的输入图像的梯度。

0 投票
0 回答
22 浏览

python - valueerror tf.gradient 磁带在某些型号上不返回任何值

我遇到了 tape.gradients(loss, model.trainable_variables) 没有返回渐变的问题,我已经查看了其他问题并且已经解决了数周的问题。

loss 返回一个标量张量。当我使用来自 tfd 的离散分布时,此代码有效,但是当我使用正态/连续分布时,不会返回梯度。

0 投票
1 回答
65 浏览

python - 提取变量的 Tensorflow/Keras GradientTape 梯度值

简而言之:我在 Tensorflow/Keras 2+ 中有一个自定义损失层,它实现了一个涉及两个变量的损失函数,它也经过最小化。它有效,如下所示。我希望跟踪这两个变量的损失梯度。从输出来看,使用GradientTape.gradient()似乎有效。tf.print()但我不知道如何保持实际值。

详细

假设这是我的自定义损失层(是的,损失函数很愚蠢,为了重现性,一切都被过度简化了):

假设这些是我的数据并且Model(是y的,作为附加输入输入模型,这有效且不相关):

现在模型和损失工作了,正如变量配置文件所证明的那样,例如通过在每个时期之后保留变量(如果您检查愚蠢的损失,它们的值也有意义):

在此处输入图像描述

但是当我希望观察/保持梯度时,我会得到一个(空的?)张量列表:

ListWrapper([<tf.Tensor 'gradient_tape/model/my_loss/mul/Mul:0' shape=() dtype=float32>, <tf.Tensor 'gradient_tape/model/my_loss/pow/mul_1:0' shape=() dtype=float32>])

当然,调用numpy()这些毫无意义:

AttributeError: 'Tensor' object has no attribute 'numpy'

然而。显然这里有些东西,因为当我tf.print(grads)在训练时使用打印梯度(取消注释上面tf.print(grads)的函数内部call())时,梯度值被打印并且它们也有意义:

请注意,无需添加g.watch([self.var1, self.var2]),尽管添加它不会改变问题。

我如何跟踪这些渐变(比如我跟踪var1var2)?什么tf.print()是我看不到的“看到”?

0 投票
1 回答
50 浏览

tensorflow - 磁带梯度给出错误的输出

我正在尝试使用计算梯度,tape.gradient()但它给了我错误的答案。错误出现在u_z=tape.gradient(u,z,unconnected_gradients=tf.UnconnectedGradients.ZERO)下面代码的行和后面的两行中。该函数u在变量中不是恒定的,z,f,t而是计算的输出tape.gradient(u,z)tape.gradient(u,t)给我一个None对象。如果我作为参数传递unconnected_gradients=tf.UnconnectedGradients.ZERO,那么我会得到0.0作为导数,这是没有意义的。所以可能出错的一件事是网络断开连接,但我不明白为什么会发生这种情况以及如何修复它。我正在使用tensorflow 2.6.0 and keras 2.6.0. 我在下面提供代码和错误消息。

错误消息以及完整的回溯是

任何帮助深表感谢。谢谢你。

0 投票
1 回答
63 浏览

tensorflow - 使用 tf.GradientTape() 会耗尽所有 gpu 内存,没有它也没关系

我正在研究Convolution Tasnet,我制作的模型大小约为 505 万个变量。

我想使用自定义训练循环来训练它,问题是,

这部分耗尽了所有 gpu 内存(24GB 可用)。
当我尝试不使用时tf.GradientTape() as tape

这使用了合理数量的 gpu 内存(大约 5~6GB)。

tf.GradientTape() as tape我为基本的mnist数据尝试了相同的格式,然后它就可以正常工作了。
那么尺寸重要吗?但是当我降低BATCH_SIZE到 32 或更小时也会出现同样的错误。

为什么第一个代码块会耗尽所有 gpu 内存?

当然,我把

此代码位于第一个单元格中。

0 投票
0 回答
16 浏览

tensorflow - 使用 GradientTape 在 tf.keras (TF2) 中进行自定义训练的自定义正则化函数

我想定义我自己的定制调节器,我正在使用 GradientTape。我正在使用以下代码,但是无论我选择多大的调整参数,结果总是保持不变。有人知道我怎样才能让我的定制调节器工作吗?

我的模型:

我的定制调节器:

我的训练过程:

0 投票
0 回答
26 浏览

tensorflow - 使用 TensorBoard 和 GradientTape 进行可视化

我是 TensorFlow 的新手,并试图更好地理解 TensorBoard。

具体来说,我实现了 Lillicrap 等人的 DDPG 强化学习算法。人(2015)。为此,我使用 tf.GradientTape() 计算网络的梯度。例如,其中一个网络的梯度将计算如下:

现在我想知道当使用带有回调的 model.fit() 方法时,我是否(以及如何)仍然可以使用我理解的所有漂亮的可视化,如网络图、参数分布等。

谢谢你的帮助!

0 投票
0 回答
62 浏览

tensorflow - 神经网络的梯度

我有一个训练有素的神经网络,可以预测给定图像的噪声。现在我想用它来计算我的 NN wrt 输出范数的次梯度。

我想在更大的算法中使用它,但由于我无法让它按预期工作,我创建了这个最小的例子。

我预计随着迭代次数的增加,它会变得越来越类似于 NN 的输出。但它似乎只是增加了噪音。

请注意,我并不固定使用 GardientType。我也尝试使用keras.backend.gradients但没有成功。

有关更多背景信息,这是我正在尝试做的事情:

请注意,正则化项的次梯度可以通过使用反向传播算法进行网络训练的标准软件进行评估。(来源:https ://iopscience.iop.org/article/10.1088/1361-6420/ab6d57 ,第 4.2 章)

0 投票
1 回答
26 浏览

python - Keras GradientType:计算相对于输出节点的梯度

首先:此问题不寻求有关强化学习 (RL) 的帮助,RL 仅用作示例。

Keras 文档包含一个使用Gradient Tape的示例演员评论家强化学习实现。基本上,他们创建了一个具有两个独立输出的模型:一个用于演员(动作),一个用于评论家(奖励)。以下几行描述了反向传播过程(在代码示例中的某处找到):n1

尽管演员和评论家损失的计算方式不同,但它们将这两个损失相加以获得用于计算梯度的最终损失值。

在看这个代码示例时,我想到了一个问题:有没有办法计算输出层相对于相应损失的梯度,即根据nactor损失和梯度计算第一个输出节点的梯度使用评论家损失的最后一个输出节点?据我了解,这比添加损失(不同!)和基于这种累积方法更新梯度要方便得多。你同意吗?

0 投票
1 回答
51 浏览

tensorflow - 下面的代码在 tensorflow 中给出了“UnreadVariable”错误

我收到以下错误:

我尝试过:tf.compat.v1.disable_eager_execution()禁用急切张量执行,但我无法提取任何张量帖子的值。另外我不知道禁用 eagerTensor 是否真的解决了这个问题,因为我无法打印渐变或损失。