问题标签 [tensorflow-gradient]

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 回答
229 浏览

tensorflow - 如何通过在 Tensorflow 中预测另一个权重的模型进行反向传播

我目前正在尝试训练一个模型(超网络),该模型可以预测另一个模型(主网络)的权重,从而减少主网络的交叉熵损失。但是,当我使用 tf.assign 将新权重分配给网络时,它不允许反向传播到超网络中,从而使系统不可微分。我已经测试了我的权重是否正确更新,它们似乎是因为从更新的权重中减去初始权重是一个非零和。

这是我想要实现的最小示例。

有谁知道我如何让 tensorflow 来计算梯度?谢谢你。

0 投票
1 回答
1221 浏览

python - OpenAI Gradient Checkpointing with Tensorflow Eager Execution

我最近切换到 Tensorflow Eager(目前正在使用 TF 1.8.0)并且非常喜欢它。但是,我现在有一个相当大的模型,当使用计算 TF 中的梯度所需的梯度磁带运行时,它不适合我的 GPU 内存(GTX 1080Ti,12GB VRAM)。前传(即不使用渐变胶带)工作正常。

我考虑过使用 OpenAI 的Gradient Checkpointing,希望这会有所帮助。但是,在他们的 Git 中描述的简单使用它似乎对 Eager Execution 没有帮助,即

内存不足,与是否使用梯度检查点无关。

我的猜测是梯度磁带仍然存储所有变量和向后传递所需的信息,并且梯度检查点没有效果,因为 Eager 模式下的 TF 实际上并没有构建图形(据我了解 - 或者至少它是不同的图形)。

您是否有任何经验或任何想法如何解决这个问题,或者我需要做什么才能在 TF Eager 模式下使用梯度检查点?

0 投票
2 回答
246 浏览

python-3.x - step 和 num_epochs 的区别

我不明白在任何类型的 ML 代码中使用steps和的需要。num_epochs

有些程序同时包含这两个变量。

谁能帮我吗?

0 投票
0 回答
238 浏览

python-3.x - 自定义损失函数会发生 NaN 损失,即使梯度设置为 0

我一直在尝试为 TF Estimator 实现自定义损失函数,但 TensorFlow 正在返回 NaN 损失。即使将学习率设置为低数字 (1e-10) 或 0,也会发生这种情况。当强制将梯度设置为 0 时,神经网络会工作,这意味着梯度存在问题。我已经检查了数据集的 NaN 值、异常值等。此外,我试图删除任何可能干扰自动微分的函数,但无济于事(例如 map_fn)。还有什么可能导致这些问题?

  • 损失函数不会对神经网络的所有预测进行同等加权;在生成损失时会多次考虑某些预测
  • 损失函数还需要不通过神经网络运行的特征

错误信息:

0 投票
1 回答
148 浏览

python - 使用 tensorflow,您如何平均多个批次的参数梯度值并使用该平均值进行更新?

像许多开发深度学习模型的人一样,我受到硬件资源的阻碍,即 GPU 内存。我有一个音频分类问题,我正在尝试许多 RNN。数据非常大,我只能使用小批量,并且还必须限制 lstm 大小。我了解许多人使用频谱图或其他方法向网络提供更精简的数据,但我特别想知道如何使用原始数据来做到这一点。

这就是我目前正在做的大约 4 的批量大小:

理想情况下,我希望在 GPU 上计算一个批次的每个参数的梯度,然后将它们移动到 RAM,同时计算下一批的梯度。经过一些批次后,我想平均每个参数的梯度并使用它们来更新网络。

我从 inception github 页面得到了这个想法,该页面描述了类似于在多个 GPU 上并行化的内容:https ://github.com/tensorflow/models/tree/master/research/inception

0 投票
2 回答
2685 浏览

python - 如何将自定义梯度分配给具有多个输入的 TensorFlow op

我正在尝试使用 TensorFlow 的@tf.custom_gradient功能将自定义渐变分配给具有多个输入的函数。我可以为一个输入组合一个工作设置,但不能为两个或更多输入。

我的代码基于TensorFlow 的 custom_gradient 文档,它适用于一个输入,如下例所示:

此示例静默运行,然后关闭。没有问题,没有错误。变量按预期进行优化。但是,在我的应用程序中,我需要使用多个输入进行这样的计算,所以这种形式的东西:

运行它来代替示例(并将另一个变量输入添加到 的调用my_identify)会导致以下错误输出。据我所知,错误的最后一部分来自操作的动态生成——信息格式与操作建立所需的 C++ 格式相匹配(尽管这就是我所知道的全部)。

基于其他自定义渐变选项,我推测问题是缺少为第二个输入参数提供的渐变。因此,我将功能更改为:

这会导致以下更熟悉的错误:

装饰器仅将@custom_gradient最后返回的元素标识为渐变。因此,我尝试将两个渐变放入一个元组中,(grad, grad)这样该函数只会有“两个”输出。TensorFlow 也拒绝了这一点,这一次是因为它不能像调用张量那样调用元组——事后看来,这是完全合理的。

我已经对这个例子大惊小怪了一些,但无济于事。无论我尝试什么,我都无法获得自定义渐变来处理多个输入。我希望在自定义操作和渐变方面比我有更多知识的人对此有更好的了解——在此先感谢您的帮助!

0 投票
0 回答
254 浏览

tensorflow - 在 keras 中制作内存高效的 GAN:`clear_session` 导致张量流图冲突

我已经为将运行 4000 个 epoch 的通用对抗网络编写了代码,但是,在 2000 个 epoch 之后 - 模型编译时间和内存使用变得非常低效并且代码运行非常缓慢。我想让我的代码内存高效。

基于以下两个帖子。我相信答案是clear_session在每个时代结束时使用:

https://github.com/keras-team/keras/issues/2828

https://github.com/keras-team/keras/issues/6457

但是如果我clear_session在每个 epoch 结束时使用,我需要在这样做之前将鉴别器和生成器的权重保存到磁盘。此策略仅适用于第一个 epoch,之后我不断收到ValueError: Tensor("training_1/Adam/Const:0", shape=(), dtype=float32) must be from the same graph as Tensor("sub:0", shape=(), dtype=float32).由已建立的 tensorflow 图的停止和重新启动引起的错误。我也收到错误Cannot interpret feed_dict key as Tensor: Tensor Tensor("conv1d_1_input:0", shape=(?, 750, 1), dtype=float32) is not an element of this graph.

我正在尝试制作一个内存高效的 GAN,该 GAN 在使用clear_session以防止内存泄漏时在随后的每个 epoch 中保存和重新加载学习的权重的基础上运行。有谁知道如何在没有冲突的张量流图的情况下实现这一点。

0 投票
1 回答
892 浏览

python - 如何在小批量上累积我的损失然后计算我的梯度

我的主要问题是;平均损失与平均梯度相同吗?我如何在小批量上累积损失然后计算我的梯度?

我一直在尝试在 Tensorflow 中实现策略梯度,但遇到了无法将所有游戏状态一次输入网络然后更新的问题。问题是如果我降低我的网络大小然后一次在所有帧上训练并取损失的平均值然后它开始很好地收敛。但是如果我在小批量上累积梯度然后平均它们,我的梯度会爆炸并且我的权重溢出。

任何帮助或见解将不胜感激。

还要记住,这是我第一次在这里提问。

0 投票
1 回答
373 浏览

tensorflow - 如何在 TensorFlow 中计算次梯度?

TensorFlow 中的自动微分过程是否会在需要时计算次梯度?如果有很多次梯度,那么将选择哪一个作为输出?

我正在尝试在链接https://www.aclweb.org/anthology/P13-1045中实现这篇论文,它使用递归神经网络来执行有效的语言解析。目标函数使用铰链损失函数来选择最佳输出向量,这使得函数不可微。我在渴望模式下使用 TensorFlow (v1.12) 对模型进行编程,并使用自动微分来计算梯度。每批后,我可以看到梯度值发生变化,并且精度略有提高。一段时间后,它会减少,这个过程会继续。对于所有超参数配置,该模型根本不收敛。

小批量:256、512、1024;正则化参数 - 0.1、0.01、0.001;学习率 - 0.1、0.01、0.001;优化函数——梯度下降、adagrad、adam;

在论文中,他们描述了如何以非常抽象的方式找到最优函数的次梯度,我还没有理解。一开始我的观点是自动梯度计算计算次梯度。但此刻,我开始怀疑,因为这似乎是唯一缺失的变量。

0 投票
0 回答
34 浏览

python - 将 Softmax 的输出捕获到 Tensorflow 中的图像中

在 TensorFlow 图像处理方面需要一些帮助。

我正在探索 kovid 上的一个开源项目 - https://github.com/lindawangg/COVID-Net

我能够成功下载模型并成功运行预测。因此,当我inference.py在示例中运行时,它会生成完美的输出。

然而,我试图实现的是,从完成的匹配中生成热图,如图所示。尽管尝试了许多可能性,但我对实现这一点一无所知。

这些是我的理解,他们使用带有 logit 函数的 Softmax 来找出匹配的概率。有了这个假设,我写了一个类似的代码

在哪里

这是我为生成梯度输出添加的代码,但是这会失败并出现类似的错误

请帮忙.. 我对 ML、Tensorflow 和 python 完全陌生,所以如果这个问题看起来非常愚蠢,请原谅我!