簡體   English   中英

Keras LSTM和嵌入連接數組維度問題

[英]Keras LSTM and Embedding Concatenate Array Dimensions Issue

我正在構建一個LSTM網絡,用於多變量時間序列分類,使用2個分類特征,我在Keras中創建了嵌入層。 模型編譯,體系結構在下面顯示代碼。 我得到一個ValueError: all the input array dimensions except for the concatenation axis must match exactly 這對我來說很奇怪,因為模型編譯和輸出形狀似乎匹配(沿着軸連接的3D對齊= -1)。 模型擬合X參數是3個輸入的列表(第一分類變量數組,第二分類變量數組和LSTM的多變量時間序列輸入3-D)

Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_4 (InputLayer)            (None, 1)            0                                            
__________________________________________________________________________________________________
input_5 (InputLayer)            (None, 1)            0                                            
__________________________________________________________________________________________________
VAR_1   (Embedding)             (None, 46, 5)        50          input_4[0][0]                    
__________________________________________________________________________________________________
VAR_2 (Embedding)               (None, 46, 13)       338         input_5[0][0]                    
__________________________________________________________________________________________________
time_series (InputLayer)        (None, 46, 11)       0                                            
__________________________________________________________________________________________________
concatenate_3 (Concatenate)     (None, 46, 18)       0           VAR_1[0][0]           
                                                                 VAR_2[0][0]               
__________________________________________________________________________________________________
concatenate_4 (Concatenate)     (None, 46, 29)       0           time_series[0][0]                
                                                                 concatenate_3[0][0]              
__________________________________________________________________________________________________
lstm_2 (LSTM)                   (None, 46, 100)      52000       concatenate_4[0][0]              
__________________________________________________________________________________________________
attention_2 (Attention)         (None, 100)          146         lstm_2[0][0]                     
__________________________________________________________________________________________________
dense_2 (Dense)                 (None, 1)            101         attention_2[0][0]                
==================================================================================================
Total params: 52,635
Trainable params: 52,635
Non-trainable params: 0
n_timesteps = 46
n_features = 11

def EmbeddingNet(cat_vars,n_timesteps,n_features,embedding_sizes):
    inputs = []
    embed_layers = []
    for (c, (in_size, out_size)) in zip(cat_vars, embedding_sizes):
        i = Input(shape=(1,))
        o = Embedding(in_size, out_size, input_length=n_timesteps, name=c)(i)
        inputs.append(i)
        embed_layers.append(o)

    embed = Concatenate()(embed_layers)

    time_series_input = Input(batch_shape=(None,n_timesteps,n_features ), name='time_series')

    inputs.append(time_series_input)

    concatenated_inputs = Concatenate(axis=-1)([time_series_input, embed])

    lstm_layer1 = LSTM(units=100,return_sequences=True)(concatenated_inputs)
    attention = Attention()(lstm_layer1)

    output_layer = Dense(1, activation="sigmoid")(attention)

    opt = Adam(lr=0.001)
    model = Model(inputs=inputs, outputs=output_layer)
    model.compile(loss='binary_crossentropy',optimizer=opt,metrics=['accuracy'])
    model.summary()

    return model 
model = EmbeddingNet(cat_vars,n_timesteps,n_features,embedding_sizes)

history = model.fit(x=[x_train_cat_array[0],x_train_cat_array[1],x_train_input], y=y_train_input, batch_size=8, epochs=1, verbose=1, validation_data=([x_val_cat_array[0],x_val_cat_array[1],x_val_input], y_val_input),shuffle=False)

我正在嘗試同樣的事情。 你應該在軸2上連接。請在這里查看

如果這在您的數據集中有效,請告訴我,因為分類功能對我沒有任何好處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM