问题标签 [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 回答
62 浏览

tensorflow - 内部错误:试图在没有处理 Tensorflow 数据的情况下对变量进行梯度(或类似)

我正在使用 Tensorflow 为二进制情感分析类微调 BERT。我想使用自定义训练循环/损失函数。但是,当我训练模型时,出现以下错误:ValueError: Internal error: Tried to take gradients (or similar) of a variable without handle data: Tensor("transformer_encoder/StatefulPartitionedCall:1019", shape=(), dtype=resource).

为了调试,我尝试简化我的训练循环以仅计算标准二进制交叉熵,这应该等同于如果我调用 model.fit() 并将二进制交叉熵作为损失函数(它工作得很好)。但是,在运行这个简化的训练循环时,我遇到了与上面相同的错误,我不确定是什么原因造成的。注意:我使用的是 tensorflow 2.3.0。

这是模型:

这是训练循环功能。ypred = model(train_x)在 tf.GradientTape()中运行时似乎出现了这个问题:

同样,这似乎只发生在 tf.GradientTape() 中,因为 model.fit() 不会导致任何问题。

0 投票
2 回答
1445 浏览

tensorflow - ValueError:通过张量损失时需要磁带

正如https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/Optimizer?hl=en#minimize中所说, minmize 的第一个参数应该满足要求,

张量或可调用。如果是可调用的,损失应该不带参数并返回值以最小化。如果是张量,则必须传递磁带参数。

第一段代码将张量作为minimize()的输入,它需要梯度带,但我不知道怎么做。

第二段代码将callable函数作为minimize()的输入,很简单

如何添加渐变胶带,我知道下面的代码肯定有效。

请帮我修改第一段代码并让它运行,谢谢!

0 投票
0 回答
36 浏览

python - Tensorflow GradientTape 仅计算带有自定义损失的“无”梯度

所以我有一个模型(A),我正在使用自定义训练程序进行训练。它由第二个模型 (B) 支持。这当然意味着我必须使用tf.GradientTape并自己计算 + 应用渐变。

但是,它没有按预期工作,而是作为gradients,只返回一个列表 [None, None ...] 。代码片段:

模型是正确的,我测试了它们的各个方面。这不是我第一次使用梯度磁带来计算梯度。然而,这一次,梯度调用只返回一个“无”列表,而不是返回张量列表。我不知道发生了什么事。

我还查看了一篇文章,并使用 .watch() 将每个变量添加到渐变磁带,它没有改变任何东西。所有其他梯度的计算都没有问题。我几乎尝试了一切,迫切需要帮助。

0 投票
1 回答
59 浏览

tensorflow - 为什么 tf.GradientTape.jacobian 没有给出?

我正在使用 IRIS 数据集,并且正在关注这个官方教程:自定义培训:演练

在训练循环中,我试图分别收集epoch%50==0列表中每个模型的输出和权重m_outputs_mod50, gather_weights

m_outputs_mod50[0]运行上述程序并尝试使用 epoch 0 (使用and gather_weights[0])获取 jacobian

我得到一个无列表作为输出。

为什么?

0 投票
1 回答
150 浏览

python - Tensorflow:使用比 CPU 慢的 GPU 的自定义训练循环

我正在 Colab 中对神经网络进行这种自定义训练,有无 GPU,使用 CPU 的训练过程更快,这让我认为我没有并行化操作或遗漏一些东西。我不认为是因为模型小,因为我尝试了更复杂的模型,问题仍然存在:

我得到的输出如下:

没有 GPU: 100%|██████████| 100000/100000 [01:30<00:00, 1101.79it/s]

使用 GPU: 100%|██████████| 100000/100000 [03:36<00:00, 461.47it/s]

0 投票
0 回答
53 浏览

tensorflow - 修改隐藏层的梯度并反向传播修改后的梯度以找到剩余层的梯度

考虑一个具有 2 个隐藏层的神经网络。我想计算第二个隐藏层参数的梯度wrt损失,修改它,然后使用修改后的梯度反向传播并找到第一个隐藏层的梯度。我目前正在这样做:

但是 model_gradients_first_layer 以 None 的形式出现。

0 投票
1 回答
115 浏览

python - 使用 tf.function 时采用渐变

我对以下示例中观察到的行为感到困惑:

较低的行为是我所期望的。我如何理解 @tf.function 案例?

非常感谢您!

(请注意,这个问题不同于:使用 tf.function 时缺少梯度,因为这里所有的计算都在函数内部。)

0 投票
0 回答
33 浏览

tensorflow - 如何使用 GradientTape 计算二阶梯度?

我正在尝试计算以下函数的偏导数,您能否建议这是否是使用 TensorFlow 计算偏导数的正确方法?

0 投票
0 回答
69 浏览

python - 急切执行函数的输入不能是 Keras 符号张量、自定义损失函数、Tensorflow 2、梯度磁带

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

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

执行后,我得到这个_SymbolicException

当我取消注释tf.compat.v1.disable_eager_execution()时,问题似乎消失了,模型开始训练。我想知道为什么我会得到这个_SymbolicException,以及如何在不禁用急切执行的情况下解决它。有任何想法吗?

0 投票
0 回答
21 浏览

logistic-regression - 使用 GradientTape 的多类逻辑回归

我正在尝试使用 GradientTape 在没有 softmax 的情况下执行多类逻辑回归。似乎模型没有收敛,因此我的准确度为 0。它是标准的 MNIST 数据集,具有以下参数和代码:

谁能解释我可能是什么原因?