问题标签 [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.
python - Tensorflow:从输入到输出的梯度计算
我想计算神经网络输出相对于输入的梯度。我有以下张量:
对于从输入到整个输出向量的梯度,我可以使用以下内容:
因为我想计算每个时间样本的梯度,所以我想计算
对于每个i
.
最好的方法是什么?
python - 如何在 Tensorflow 训练期间打印梯度?
为了调试 Tensorflow 模型,我需要查看渐变是否发生了变化,或者其中是否有任何 nan。简单地在 Tensorflow 中打印一个变量是行不通的,因为你看到的是:
我尝试使用tf.Print
类,但无法使其工作,我想知道它是否可以以这种方式实际使用。在我的模型中,我有一个训练循环,可以打印每个时期的损失值:
插入print(model.gradients[0][1])
此函数将不起作用,因此我尝试在丢失打印后立即使用以下代码:
但我收到以下错误消息:
这是有道理的,因为tf.Print
它确实不是图表的一部分。因此,我尝试tf.Print
在实际图形中使用损失后计算,但效果不佳,我仍然得到Tensor("Train/Model/mul:0", shape=(8182, 100), dtype=float32)
.
如何在 Tensorflow 的训练循环中打印梯度变量?
python - 在张量流中更新张量
我在 tensorflow 中定义了一个无监督问题,我需要在每次迭代时更新我的 B 和我的 tfZ,但我不知道如何tfZ
使用 tensorflow 会话来更新我的。
此代码打印以下内容:
张量对象正确地没有分配属性,但我找不到任何其他附加到对象的函数可以做到这一点。如何正确更新我的张量?
python - 除了使用 tf.registergradient 的渐变,我可以返回变量吗
我对 tf.registergradient 操作有疑问
我正在使用 @tf.registergradient 对 tensorflow 渐变进行自定义更改。注意:我不是只修改 backpopogated 渐变的增量部分。这工作正常。但是现在我想保存我正在修改的变量,包括修改之前和之后,这样我可以在完成训练后分析它们。但是我不确定如何做到这一点。这是代码片段
@tf.RegisterGradient("CustomModGrad")
def noise_delta(unused_op, delta):
noiz = tf.random_normal(shape=tf.shape(grad), stddev=sigma_value)
delta = tf.add(delta,noiz)
return delta
我想存储 noiz 和 delta 变量,以便以后分析它们。我该怎么做呢?谢谢你!
python - Tensorflow TypeError:获取参数 None 的类型无效在寻找梯度的同时
这是一个带有 CNN 模型的文本分析任务,我想可视化哪个词最能触发我的特定分类,这是我的代码
最后一部分我想通过使用嵌入层的梯度来获取原始输入,结果变成了 None 类型,我正在使用 Google word2vec 模型来嵌入前向传递。
I---->最后一行错误
我想可视化直到输入的最后一个 cnn 层,所以我想找出在输入之前反向传播了多少,哪个词贡献最大,
tensorflow - Tensorflow - 没有为任何变量提供梯度
我正在 Jupyter 上试验一些代码并一直卡在这里。如果我删除以“optimizer = ...”开头的行以及对该行的所有引用,事情实际上工作得很好。但是,如果我将这一行放在代码中,则会出现错误。
我没有在此处粘贴所有其他函数以使代码的大小保持在可读水平。我希望更有经验的人可以立即看到这里有什么问题。
请注意,输入层、2 个隐藏层和输出层中有 5、4、3 和 2 个单元。
代码:
错误:
请注意,如果我运行
就在“优化器 = ...”行之前,我实际上在那里看到了我的可训练变量。
有人会知道可能是什么问题吗?
编辑和添加更多信息:如果您想看看我如何创建和初始化我的参数,这里是代码。也许这部分有什么问题,但我不明白是什么..
#附录
我让它工作了。我没有写一个单独的答案,而是在这里添加我的代码的正确版本。
(大卫在下面的回答很有帮助。)
我只是删除了 my_sess 作为我的 compute_cost 函数的参数。(我以前无法让它工作,但似乎根本不需要它。)我还在我的主函数中重新排序了语句,以便以正确的顺序调用事物。
这是我的成本函数的工作版本以及我如何称呼它:
这是我调用 compute_cost(..) 函数的主要函数:
python - tensorflow:参数权重的变化与应基于梯度的变化不同
编辑:已解决——使用不同的梯度训练示例与优化器更新是愚蠢的。
好的,这让我完全难过。
我有一个参数向量,我们称之为w。
w = [-1.34554319, 0.86998659, 0.52366061, 2.6723526, 0.18756115, 0.16547382]
我compute_gradients
用来计算w的渐变,它告诉我渐变是:
dw = [-0.0251517, 0.88050844, 0.80362262, 0.14870925, 0.10019595, 1.33597524]
我的学习率是0.1
. 尔格:
w_new = w - 0.1 * dw
w_new = [-1.34302802, 0.78193575, 0.44329835, 2.65748168, 0.17754156, 0.0318763]
您可以自己检查数学,但应该检查一下。但是,如果我运行 tensorflow 代码并评估 的值w_new
,我会得到:
w_new_tf = [-1.27643258, 0.9212401, 0.09922112, 2.55617223, 0.38039282, 0.15450044]
老实说,我不知道为什么要这样做。
编辑:让我为您提供确切的代码,向您展示它为什么不起作用。正如您将看到的,这可能是由于索引造成的。
这是样板启动代码。
这是自定义目标函数。
这是一些样板代码,用于实际最小化该功能。在两点上,我sess.run
调用了tf.Variable
s 来查看值是如何变化的。
最后,这是一些实际获取渐变的代码。这些渐变是根据手工导出的渐变进行双重检查的,因此它们是正确的。对不起代码的丑陋,这是另一个 SO 答案的公然复制和粘贴:
python - 我可以在不应用输入的情况下获得张量相对于输入的梯度吗?
例如,我需要计算cross_entropy
相对于的梯度x
,但我需要对梯度函数应用另一个值。
那是:
我认为tf.gradients()
函数只会在x = x
. 那么 tensorflow 是否提供了这些功能?
python - 如何使用张量板监控 keras 中的梯度消失和爆炸?
我想用 keras 监控 tensorboard 中的梯度变化,以确定梯度是消失还是爆炸。我应该怎么办?
tensorflow - 张量流中的停止梯度
我想知道 tf.stop_gradient 是否仅停止给定操作的梯度计算,或者停止其输入 tf.variable 的更新?我有以下问题 - 在 MNIST 中的正向路径计算期间,我想对权重执行一组操作(比如说 W 到 W*),然后对输入进行 matmul。但是,我想从反向路径中排除这些操作。我只想在反向传播训练期间计算 dE/dW。我编写的代码阻止 W 更新。你能帮我理解为什么吗?如果这些是变量,我知道我应该将它们的可训练属性设置为 false,但这些是权重操作。如果 stop_gradient 不能用于此目的,那么如何构建两个图,一个用于正向路径,另一个用于反向传播?
我正在使用 tensorflow 梯度下降优化器进行训练。