可以动态指定 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)
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)