Tensorflow 有没有一种方法可以得到张量流积和,在每一个积和处有一个停止梯度?
基本上是这样的Tensorflow 有没有一种方法可以得到张量流积和,在每一个积和处有一个停止梯度?,tensorflow,Tensorflow,基本上是这样的 w[t+1] = stop_gradient(w[t]) + dw[t] 但效率很高。我假设for循环与cumsum相比不是很好 我也可以重新构造代码,但可能有一种聪明的方法可以让它工作,并且更容易阅读 更新: 下面是一个简单的示例,用于重新构造问题以避免累积和: import pandas as pd from pylab import * ion() import numpy as np import tensorflow as tf def get_loss(w, lr=
w[t+1] = stop_gradient(w[t]) + dw[t]
但效率很高。我假设for循环与cumsum相比不是很好
我也可以重新构造代码,但可能有一种聪明的方法可以让它工作,并且更容易阅读
更新:
下面是一个简单的示例,用于重新构造问题以避免累积和:
import pandas as pd
from pylab import *
ion()
import numpy as np
import tensorflow as tf
def get_loss(w, lr=1.0):
n = tf.range(w[0].shape[0] - 1, dtype=tf.float32)
loss = 0
dw = w[1:] - tf.stop_gradient(w[:-1])
temp = lr * tf.reduce_sum(dw ** 2, axis=range(1, len(w.shape)))
loss += tf.reduce_sum(temp) / 2
return loss
opt = tf.keras.optimizers.SGD(learning_rate=0.1)
w = tf.keras.backend.variable(np.sin(np.linspace(0, 10 * np.pi, 1000)[:, None]))
w_ = [w.numpy()]
for i in range(1000):
with tf.GradientTape() as tape:
loss = get_loss(w)
g = tape.gradient(loss, [w])
opt.apply_gradients(zip(g, [w]))
if i % 200 == 0:
w_.append(w.numpy())
ww = np.hstack(w_)
figure(1)
clf()
plot(ww, alpha=0.5)
show()
Hi@mathtick,请提供一个更具体的用例。该用例是指您正在将一个适应的过程(过滤器或学习算法,如果您愿意)建模为一个批次。所以求解输运方程就是一个例子。最后我做了这样的事情:$dw=w_[1:]-tf.stop_gradient(w_[:-1])$,这很好。Hi@mathtick,如果你能在测试输入和输出中包含一个需要优化的最小可复制代码,那将是一个很好的选择。@tf_Support添加了一个简单的例子,基本上就是权重上的传输(平流)方程。注意稳定性机制等。例如,权重/参数满足某些物理/动力学条件,然后通过观察模型也会丢失一些数据。例如,这在天气数据同化中是典型的。老实说,我不确定积云上的stop_梯度或这个版本是否有任何性能优势。这有点奇怪,因为我认为在时间操作系统中有一个较低的三角系统。作为一个批处理来解决这个问题可能并不总是有意义的,但是你可以通过“空间”相关的学习速率来获得一些并行化的优势。i、 e.首先更努力地学习早期参数,并让其顺利进行。Hi@mathtick,请为此提供一个更具体的用例。该用例是如果您正在将一个适应的过程(过滤器或学习算法,如果您愿意)建模为一个批。所以求解输运方程就是一个例子。最后我做了这样的事情:$dw=w_[1:]-tf.stop_gradient(w_[:-1])$,这很好。Hi@mathtick,如果你能在测试输入和输出中包含一个需要优化的最小可复制代码,那将是一个很好的选择。@tf_Support添加了一个简单的例子,基本上就是权重上的传输(平流)方程。注意稳定性机制等。例如,权重/参数满足某些物理/动力学条件,然后通过观察模型也会丢失一些数据。例如,这在天气数据同化中是典型的。老实说,我不确定积云上的stop_梯度或这个版本是否有任何性能优势。这有点奇怪,因为我认为在时间操作系统中有一个较低的三角系统。作为一个批处理来解决这个问题可能并不总是有意义的,但是你可以通过“空间”相关的学习速率来获得一些并行化的优势。i、 e.首先要更努力地学习前面的参数,并让它顺利进行。