问题标签 [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 投票
1 回答
290 浏览

python - 使用 Gradient Tape,TF2.6 自定义损失函数

我正在尝试在我的Keras顺序模型(TensorFlow 2.6.0)中使用自定义损失函数。这种自定义损失(理想情况下)将计算数据损失加上物理方程的残差(例如,扩散方程、Navier Stokes 等)。这个残差是基于模型输出导数 wrt 它的输入,我想使用GradientTape.

在这个 MWE 中,我删除了数据损失项和其他方程损失,只使用了输出对其输入的导数。数据集可以在这里找到。

执行后,我得到这个ValueError

ValueError: Passed in object of type <class 'keras.engine.keras_tensor.KerasTensor'>, not tf.Tensor

当我更改loss=customLossloss='mse'时,模型开始训练,但使用它customLoss就是重点。有任何想法吗?

0 投票
1 回答
52 浏览

tensorflow - 在 Tensorflow 中计算损失函数的 Hessian

我想计算 Tensorflow 中神经网络的损失函数相对于所有参数(或可训练变量)的粗麻布。通过修改 Tensorflow 文档(https://www.tensorflow.org/api_docs/python/tf/GradientTape)中的示例代码,我设法计算了第一层的权重矩阵的粗麻布(如果我没记错的话) :

如果我尝试用 model.trainable_variables 来计算它,tape.jacobian 会抱怨“列表对象没有属性形状”。相反,我尝试将 model.trainable_variables 展平并用展平的向量计算它:

现在的问题是 g 出于某种原因是空的(NoneType)。我注意到 source 是 tf.Tensor-type 但 model.trainable_variables[0] 是 tf.ResourceVariable 类型,所以我尝试通过将 source 声明为

但这并没有改变任何东西,所以我猜这不是问题。我还认为问题可能是源变量没有被观看,但似乎它被设置为可训练,即使我执行tape.watch(source),g 仍然是空的。

有谁知道我该如何解决这个问题?

0 投票
0 回答
32 浏览

python - 无法在TensorFlow中获取网络的损失函数wrt trainable_variables的tape.gradients

我正在尝试将 PyTorch 代码转换为 TensorFlow,但唯一缺少的是计算损失函数相对于模型的权重和偏差的梯度。输出只是一个带有None值的列表。

由于它是一个无需任何训练数据即可预测流体流动速度和压力的网络,因此找不到太多类似的代码。代码链接。

我的代码的主要部分是:

它计算了我所有的损失,但就像我说的那样,它给出None了可训练变量的损失梯度。似乎它们没有连接,但话又说回来,为什么它在 PyTorch 代码中起作用?

0 投票
1 回答
22 浏览

tensorflow - 在 GradientTape(persistent=True) 之后调用 __exit_

我开始记录渐变,tf.GradientTape(persistent=True)以便能够gradient_tape.gradient()多次调用。由于这意味着在调用该gradient()方法后没有释放渐变,我是否必须__exit__在末尾调用类似的东西train_step

0 投票
1 回答
66 浏览

tensorflow - Tensorflow梯度磁带计算

我试图TF GRADIENT TAPE在以下代码中了解 的目的:

操作:

diff = tf.Tensor(12.0, shape=(), dtype=float32)

我很困惑,因为既然var=5, the op=(2*5)+(5*5)=>35, and if I are calculating the derivative of a constantthendiff should be 0

我理解它的原因12,因为它不采用varas5而是(2*var)+(var*var)=> 2var+var**2计算这个函数的导数2+2*var=>12

但我不明白的是,为什么var不考虑给定的值?

0 投票
0 回答
27 浏览

tensorflow2.0 - 在 Gradient Tape Tensorflow 中,梯度为 0.s

这是我正在工作的模型的一部分。作为 tf 计算梯度的新手,当我发现所有梯度值都为 0 时,我感到很困惑。这是代码:

后来我发现还有另一种叫做 jacobian 的方法,我在这里也使用过,仍然给出 0.s asgrad 值。谁能告诉我该怎么做。谢谢。

0 投票
0 回答
27 浏览

tensorflow2.0 - 为什么梯度以相同的值出现

我正在尝试了解渐变磁带渐变。这是我正在尝试生成结果的虚拟模型。我试图理解为什么每列中的所有值都是相同的。这是带有输出的代码:

输出

谁能告诉我为什么会这样?

0 投票
0 回答
16 浏览

python - 监督梯度带内的 2 个单独的损失

TLDR:我有一个包含 2 个模块的网络,1. 图像位置预测(x 和 y 的回归)输入:2. Q 值函数预测。我想监督每个使用渐变胶带的损失。

因此,为了简要介绍一下背景,我正在研究一个 RL 问题,我想在给定图像的情况下预测 Q 值。我正在比较几种方法。我创建了一个网络,可以在给定图像坐标的情况下预测 Q 值。现在我想使用 CNN 来预测给定图像在图像坐标中的代理位置。

我的问题是我想监督 2 个单独的损失。一种用于在给定估计图像坐标的情况下预测 Q 值。还有一个用于估计给定图像的代理的图像坐标。

这是我这样做的模型:

我一直在尝试我的姿态估计梯度,因为所有这些都没有。这是我目前使用渐变胶带的尝试:

我的感觉是我需要在 loc 层中包含输出层?我真的不太确定我已经敲了几个小时的头,任何帮助将不胜感激。

0 投票
0 回答
19 浏览

machine-learning - 为基于 Wassertein-GP 的 GAN 定义训练函数的问题

我正在尝试基于 Wassertein-GP 方法为表格 GAN 编写代码。我正在使用带有 keras 库的 python 来编写代码。为此,在定义了 Critic 和 Generator 函数之后,我编写了如下的 train 函数:

但是,运行此代码时出现错误。有人可以告诉我我在做什么错误吗?

0 投票
0 回答
72 浏览

python - 如何使用 tf.GradientTape 并行化自动微分?

我想自动区分我希望并行化的相当复杂的功能。

我正在使用TensorFlow 2.x 并使用 tf.GradientTape 进行区分。

我做了一个玩具例子来说明这一点。自动微分在没有线程的情况下工作得很好,但是当完全相同的计算在两个单独的线程中运行时会中断。

从下面的输出中可以看出,当线程用于相同的简单计算时,梯度被破坏了。

关于如何在 GradientTape 中并行化我的函数的任何建议/想法将不胜感激?