亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

對 LSTM 形狀的質疑

對 LSTM 形狀的質疑

MMMHUHU 2023-07-11 10:44:43
我看到很多人對 LSTM 有同樣的問題,所以我想讓這個問題介紹一個通用的例子,然后介紹我自己的。預期的輸入形狀由(樣本、時間步長、特征)組成。這是我第一次陷入困境,因為許多示例僅提供兩個輸入,如下所示:model.add(LSTM(32, input_shape=(TIMESTEPS, FEATURES), activation='relu', return_sequences = True))如果我是對的,當省略第三個參數時,您只是沒有指定樣本數。因此,假設我有以下結構作為輸入:import numpy as np    np.zeros((BATCHES, TIMESTEPS, FEATURES))用數字來表示我們可以得到:np.zeros((2, 3, 5))[[[0. 0. 0. 0. 0.]  [0. 0. 0. 0. 0.]  [0. 0. 0. 0. 0.]] [[0. 0. 0. 0. 0.]  [0. 0. 0. 0. 0.]  [0. 0. 0. 0. 0.]]]這正是我的情況。我有一個帶有 的層 0 input_shape=(480, 16),并且model.predict()正在接受使用 創建后填充形狀 (1, 480, 16) 的輸入batch = np.zeros((90, 480, 16))。形狀為 (1, 480, 16) 的單個小批量輸入的預測等于,model.predict(batch[[i]])但我期望返回一個長度等于 480 的 1D 數組,相反,我收到的是:[[0. 1. ... 0. 0.]]< 480。該數組的值目前并不重要,但他的形狀應該預測每個時間步長的值。我的問題出在哪里?提前致謝更新: 我的案例的整個模型聲明是:model = Sequential()model.add(LSTM(32, input_shape=(480, 16), activation='relu', return_sequences = True)))model.add(Dense(16))model.compile(loss='mse', optimizer=Adam(lr=0.1))return model輸入類似于以下聲明:batch = np.zeros((90, 480, 16)) # this is filled afterinput_to_predict = batch[[i]] # where i is in the range > 0  and < 90model.predict(input_to_predict)
查看完整描述

1 回答

?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

上面的示例返回 shape (1, 480, 16)。當您設置 時return_sequences=True,Keras 將返回時間步維度(您的“中間”維度),因此如果您的輸入有 480 個時間步,它將輸出 480 個時間步。最后一個維度將是最后一層中的單元數。


import numpy as np

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import *


model = Sequential()

model.add(LSTM(32, input_shape=(480, 16), return_sequences = True))

model.add(Dense(16))

model.compile(loss='mse', optimizer='adam')



batch = np.zeros((90, 480, 16))

input_to_predict = batch[[0]]

model.predict(input_to_predict).shape

array([[[0., 0., 0., ..., 0., 0., 0.],

        [0., 0., 0., ..., 0., 0., 0.],

        [0., 0., 0., ..., 0., 0., 0.],

        ...,

        [0., 0., 0., ..., 0., 0., 0.],

        [0., 0., 0., ..., 0., 0., 0.],

        [0., 0., 0., ..., 0., 0., 0.]]], dtype=float32)

(1, 480, 16)

如果設置return_sequences=False,它不會返回時間步長維度:


import numpy as np

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import *


model = Sequential()

model.add(LSTM(32, input_shape=(480, 16), return_sequences = False))

model.add(Dense(16))

model.compile(loss='mse', optimizer='adam')



batch = np.zeros((90, 480, 16))

input_to_predict = batch[[0]]

model.predict(input_to_predict).shape

(1, 16)


查看完整回答
反對 回復 2023-07-11
  • 1 回答
  • 0 關注
  • 103 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號