【问题标题】:Repeat keras LSTM output of all hidden states重复所有隐藏状态的keras LSTM输出
【发布时间】:2020-07-24 08:21:56
【问题描述】:

数据:

形状 = (T, M) #所有公司都相同的宏观时间序列
形状 = (T, N, K) #公司特定数据的微观时间序列

其中 T 是以月为单位的时间维度,M 是宏观特征的数量,N 是公司的数量,K 是市盈率等微观特征的数量。

任务:使用 LSTM 输出,重复 N 次并与微数据连接

我想使用 LSTM 的输出,即所有公司的 T 中所有 t 的所有(这里 H=4)隐藏状态,因此设置 return_sequences=True,并重复它们 N 次以便将它们与我的微数据,即用shape = (T, N, K+H)获取新数据

然后,这些新数据将被重新整形为(T*N, K+H),并馈送到具有自定义损失函数的前馈神经网络中,该损失函数适用于两个神经网络,并且只能在时间 T 时通过构造计算,因此具有批处理-大小=1!。

我已经尝试过以下方法,但由于暗淡它不起作用:

from keras.layers import concatenate, Input, LSTM, RepeatVector
from keras.utils.vis_utils import plot_model
from keras.models        import Model

in_macro        = Input(shape = (T, M),         name = 'macro_input')
in_micro        = Input(shape = (T, N, K),      name = 'micro_input')

lstm            = LSTM(4, return_sequences=True)(in_macro)
rep             = RepeatVector(N)(lstm)
conc            = concatenate([in_micro, rep])
model           = Model(inputs=[in_micro,in_macro], outputs=conc)

plot_model(model, show_shapes=True)

ValueError: Input 0 is incompatible with layer repeat_vector_1: expected ndim=2, found ndim=3

有没有一种有效的方法可以达到这个目标,甚至不需要重复?

【问题讨论】:

    标签: python tensorflow keras keras-layer


    【解决方案1】:

    找到使用Lambda层和堆栈的解决方案:

    from keras.layers import concatenate, Input, LSTM
    from keras.utils.vis_utils import plot_model
    from keras.models import Model
    import keras.backend as k
    
    in_macro = Input(shape=(T, M), name='macro_input')
    in_micro = Input(shape=(T, N, K), name='micro_input')
    
    lstm = LSTM(4, return_sequences=True)(in_macro)
    stack = Lambda(lambda x: k.stack(N*[x], axis=2))(lstm)
    conc = concatenate([in_micro, stack])
    model = Model(inputs=[in_micro,in_macro], outputs=conc)
    
    plot_model(model, show_shapes=True)
    

    【讨论】:

      猜你喜欢
      • 2019-03-15
      • 2018-01-20
      • 1970-01-01
      • 1970-01-01
      • 2019-07-17
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      • 2017-08-31
      相关资源
      最近更新 更多