可以动态指定 Keras RepeatVector 重复吗?

Can Keras RepeatVector repetition be specified dynamically?

Keras 的 RepeatVector 层允许我重复给定的 vector/Tensor n 次:https://www.tensorflow.org/api_docs/python/tf/keras/layers/RepeatVector.

但是,n 似乎必须是一个常数。有没有办法动态指定这个参数?

用例:我正在生成可变长度序列,RepeatVector 后跟一个 LSTM 层。

可以是符号张量。因此,您可以使用后端函数 shape()(或者 tf.shape())从 LSTM 层的输入张量动态查找时间步数:

from keras import backend as K

reps = RepeatVector(K.shape(lstm_input)[1])(lstm_out)

对我来说,该代码没有生成可以成功编译的模型。它抱怨提供的张量不是层的输出。对我有用的代码是:

sentence_length = Lambda(
    lambda t: tensorflow.shape(t)[1],
    name="sentence_length"
)(word_digests)

# sentence vector, repeated so available for each word
sentence_repeated = Lambda(
    lambda t: tensorflow.tile( tensorflow.expand_dims(t, 1), (1,sentence_length,1) ),
    name="sentence_repeated"
)(sentence_digest)