【问题标题】:Recurrent Neural Network with multiple output sequences of different length具有多个不同长度输出序列的循环神经网络
【发布时间】:2020-12-11 11:41:03
【问题描述】:

所以我使用tensorflow 2 并尝试从一个固定长度的序列中预测许多不同长度的序列。具体来说,输入序列的固定长度为 31,我想预测 15 个序列,其中前 5 个序列有一个长度(例如 10),接下来的 5 个有另一个长度(例如 21),最后 5 个有一个序列长度为 30 (input_length-1)。

我想我必须在输出层之前使用填充,这样对于所有训练示例,所有大于所需序列长度的值都为零。一些帮助将不胜感激,因为我非常卡在 atm...

下面是一个最小的例子来说明我想要做什么

import tensorflow as tf
import numpy as np

# examples of parameters for archictecture
neurons = 50
nb_features = 1
maximum_sequence_length = 31
nb_sequences = 15
# Here are the desired sequence lengths of output
length_of_first_5_seqs = 10
length_of_5_to_10_seqs = 21
length_of_last_5_seqs = maximum_sequence_length-1
model = tf.keras.Sequential()
model.add(tf.keras.layers.LSTM(neurons,
                            input_shape = (maximum_sequence_length, nb_features)))
# RepeaterVector layer in order to produce outputs of maximum_sequence_length -1
model.add(tf.keras.layers.RepeatVector(maximum_sequence_length-1))
# add LSTM enable return sequences
model.add(tf.keras.layers.LSTM(neurons, return_sequences = True))
# Here i guess i should do something
# output layer
model.add(tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(nb_features* nb_sequences)))

model.summary()

# fictional data
data = np.random.rand(100, maximum_sequence_length, nb_features)
yhat = model(data, training = False)
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm (LSTM)                  (None, 50)                10400     
_________________________________________________________________
repeat_vector (RepeatVector) (None, 30, 50)            0         
_________________________________________________________________
lstm_1 (LSTM)                (None, 30, 50)            20200     
_________________________________________________________________
time_distributed (TimeDistri (None, 30, 15)            765       
=================================================================
Total params: 31,365
Trainable params: 31,365
Non-trainable params: 0
_________________________________________________________________ 

【问题讨论】:

    标签: python tensorflow lstm


    【解决方案1】:

    使用函数式 API 可能更容易解决这个问题

    inp = tf.keras.layers.Input(shape = (maximum_sequence_length, nb_features))
    X = tf.keras.layers.LSTM(neurons, return_sequences = False)(inp)
    T1 = tf.keras.layers.RepeatVector(length_of_first_5_seqs-1)(X)
    T2 = tf.keras.layers.RepeatVector(length_of_5_to_10_seqs-1)(X)
    T3 = tf.keras.layers.RepeatVector(length_of_last_5_seqs-1)(X)
    T1 = tf.keras.layers.LSTM(neurons, return_sequences = True)(T1)
    T2 = tf.keras.layers.LSTM(neurons, return_sequences = True)(T2)
    T3 = tf.keras.layers.LSTM(neurons, return_sequences = True)(T3)
    T1 = tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(nb_features))(T1)
    T2 = tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(nb_features))(T2)
    T3 = tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(nb_features))(T3)
    model = tf.keras.Model(inputs = inp, outputs = [T1, T2, T3])
    

    【讨论】:

      猜你喜欢
      • 2016-03-06
      • 1970-01-01
      • 2017-11-16
      • 2017-10-14
      • 2021-04-05
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      相关资源
      最近更新 更多