Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 有没有一种方法可以得到张量流积和,在每一个积和处有一个停止梯度?_Tensorflow - Fatal编程技术网

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.首先要更努力地学习前面的参数,并让它顺利进行。