我正在嘗試構建一個 LSTM 模型,以使用 Zipcode 或 PinCode 過去 7 天的溫度、降雨量等來預測給定日期的溫度。我知道訓練數據集需要被塑造成(觀察、時間步長、特征)。我想我的情況下的特征是溫度、降雨量和時間步長為 7。因此,如果我有 2 個特征和 7 個時間步長,則一次觀察總共會有 14 個變量。我還具有狀態、區域(比如北、西、東、中等)等所有 7 個時間步共有的特征。由于每個觀測值都是一個郵政編碼,對于一個郵政編碼的所有 7 天(7 個時間步長),郵政編碼所屬的地理州和區域將是相同的。由于我們不能向 LSTM 輸入特征(對所有時間步都是通用的),我已經使用 Keras 函數式 API 將這些時間特征提供給 LSTM,并獲取 LSTM 的輸出并將其與非時間特征(狀態、區域等)連接起來,然后在最后有一個密集層。下面是我的代碼Input_LSTM = Input(shape=(7, 2), batch_size=32) # 7 timesteps and 2 featuresx = LSTM(5, stateful=True)(Input_LSTM)x = Dropout(0.2)(x)Input_MLP = Input(shape=(261,),batch_size=32) x = concatenate([x,Input_MLP], axis=1) # Join non-temporal input with LSTM o/p to be fed to a Dense # layerOutput = Dense(1)(x)model = Model([Input_LSTM,Input_MLP],Output)因為我已經聲明 LSTM 是有狀態的,所以我已經為時態和非時態輸入提供了 batch_size。當我嘗試使用行“x = concatenate([x,Input_MLP], axis=1)” 進行連接時,出現錯誤 File "<__array_function__ internals>", line 6, in concatenateValueError: zero-dimensional arrays cannot be concatenated”連接的兩個元素的形狀如下x.shapeOut[186]: TensorShape([Dimension(32), Dimension(5)]) # Here 5 is the number of neurons in LSTM, 32 is the batch sizeInput_MLP.shapeOut[187]: TensorShape([Dimension(32), Dimension(261)]) # Here 261 is the no. of non-temporal features and 32 is the batch size從網上查到零維數組是標量。但是從上面它們的形狀來看,它們似乎并不是標量。我還嘗試了一個以 Input_MLP 作為輸入的 Dense 層,并嘗試將這個 Dense 層的輸出與 x 連接起來,但沒有成功。我在網上找不到答案。我究竟做錯了什么?任何幫助將不勝感激。
1 回答
慕后森
TA貢獻1802條經驗 獲得超5個贊
我找到了問題所在。連接 keras 層的函數必須與大寫字母 C 連接。因為我使用的是帶有小寫字母“c”的函數,所以它是 numpy 函數,因此它給出了那個錯誤。一個小錯字讓我浪費了很多時間
添加回答
舉報
0/150
提交
取消
