Tensorflow:初始化串联张量的正确方法?

Tensorflow: correct way to initialize concatenated tensors?

这是我面临的问题的 MWE:

import tensorflow as tf

with tf.GradientTape() as tape:
  x = tf.Variable(0.0)
  y = tf.Variable(x)
  z = x

print(tape.gradient(y, x))
# None

print(tape.gradient(z, x))
# 1.0

好吧,显然在这种特殊情况下这很容易解决,但在我面临的实际用例中,与递归神经网络有关,我需要使用 tf.Variable 来形成张量从连接其他张量,像这样:

Dout = tf.Variable([seed]) # initialize 
for i in range(n):
  Dout = tf.concat([Dout, 
                    G.forward_step(Dout[-1])], 
                   axis = 0)

嗯,我对在 TF 中实际操作张量还很陌生,也许有一种正确的方法可以通过串联创建张量。

帮忙?

好的,知道了——您应该初始化为一个列表(根本不是张量),然后使用 tf.stack 将其转换为张量。

无论如何,在这里使用 tf.Variable 是错误的——我们不需要可训练的变量,我们想要 tf.constant.