Python TF/Keras中输入和输出长度不等的RNN层

Python TF/Keras中输入和输出长度不等的RNN层,python,machine-learning,keras,lstm,recurrent-neural-network,Python,Machine Learning,Keras,Lstm,Recurrent Neural Network,是否可以从RNN获得可变输出长度,即输入长度!=输出顺序长度 下面是一个显示LSTM输出形状的示例,test\n\u output\u v1默认设置-仅返回最后一步的输出,test\n\u output\u v2返回所有步骤的输出,即我需要类似于test\n\u output\u v2的东西,但需要输出形状(无,变量seq\u length,rnn\u dim)或至少(无,最大输出长度,rnn尺寸) 根据定义,RNN层不能具有不相等的输入和输出长度。但是,有一个技巧可以使用两个RNN层和中间的R

是否可以从RNN获得可变输出长度,即输入长度!=输出顺序长度

下面是一个显示LSTM输出形状的示例,
test\n\u output\u v1
默认设置-仅返回最后一步的输出,
test\n\u output\u v2
返回所有步骤的输出,即我需要类似于
test\n\u output\u v2
的东西,但需要输出形状
(无,变量seq\u length,rnn\u dim)
或至少
(无,最大输出长度,rnn尺寸)


根据定义,RNN层不能具有不相等的输入和输出长度。但是,有一个技巧可以使用两个RNN层和中间的
RepeatVector
层来实现不相等但固定的输出长度。下面是一个最小示例模型,该模型接受可变长度的输入序列,并生成具有固定长度的输出序列nd任意长度:

import tensorflow as tf

max_output_length = 35

inp = tf.keras.layers.Input(shape=(None, 10))
x = tf.keras.layers.LSTM(20)(inp)
x = tf.keras.layers.RepeatVector(max_output_length)(x)
out = tf.keras.layers.LSTM(30, return_sequences=True)(x)

model = tf.keras.Model(inp, out)
model.summary()
以下是模型摘要:

Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, None, 10)]        0         
_________________________________________________________________
lstm (LSTM)                  (None, 20)                2480      
_________________________________________________________________
repeat_vector (RepeatVector) (None, 35, 20)            0         
_________________________________________________________________
lstm_1 (LSTM)                (None, 35, 30)            6120      
=================================================================
Total params: 8,600
Trainable params: 8,600
Non-trainable params: 0
_________________________________________________________________

此结构可用于序列到序列模型,其中输入序列的长度不一定与输出序列的长度相同。

这是否回答了您的问题?
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, None, 10)]        0         
_________________________________________________________________
lstm (LSTM)                  (None, 20)                2480      
_________________________________________________________________
repeat_vector (RepeatVector) (None, 35, 20)            0         
_________________________________________________________________
lstm_1 (LSTM)                (None, 35, 30)            6120      
=================================================================
Total params: 8,600
Trainable params: 8,600
Non-trainable params: 0
_________________________________________________________________