如何在keras中创建合并为时间维度的多头卷积层

2024-06-26 10:39:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我想实现一个时间序列预测模型,该模型有一个非图像矩阵窗口作为输入,每个矩阵由第一层的Conv2d层处理,然后将该conv层的输出合并为时间维度,传递到像LSTM这样的循环层

一种方法是使用时间分布技术,但TimeDistributed layer将同一层应用于多个输入。每个输入产生一个输出,以在时间上得到结果,时间分布技术将在所有卷积头之间共享相同的权重,这不是我想要的,例如,如果你注入5个矩阵,权重不会调整5次,而只调整一次,并分布到当前时间分布层中定义的每个块。我怎样才能避免这种情况,并拥有独立的卷积头,输出合并为下一层的时间维度

我试着实现它如下

    Matrix_Dimention=20;
    Input_Window=4;
    Input_Matrixes=[]
    ConvLayers=[]
    for i in range(0 , Input_Window):
            Inp_Matrix=layers.Input(shape=(Matrix_Dimention,Matrix_Dimention,1));
            Input_Matrixes.append(Inp_Matrix);
            conv=layers.Conv2D(64, 5, activation='relu', input_shape=(Matrix_Dimention,Matrix_Dimention,1))(Inp_Matrix)
            ConvLayers.append(conv);
            
    #Temporal Concatenation

    Spatial_Layers_Concate = layers.Concatenate(ConvLayers); # this causes error : Inputs to a layer should be tensors
    
    #Temporal Component

    LSTM_Layer=layers.LSTM(activation='relu',return_sequences=False)(Spatial_Layers_Concate )

    Model = keras.Model(Input_Matrixes, LSTM_Layer)
    Model.compile(optimizer='adam', loss=keras.losses.MeanSquaredError)

如果您通过更正我的实现来提供您的答案,或者提供您自己的答案,如果有更好的方法来形成这个想法,那就太好了,tnx


Tags: 方法模型inputmodellayers时间矩阵matrix