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

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

Keras LSTM 輸入和輸出維度問題

Keras LSTM 輸入和輸出維度問題

牛魔王的故事 2023-05-09 15:36:01
我正在嘗試為多步預測創建 LSTM 模型?,F在我正在測試模型網絡設置,但發現它在設置上存在尺寸問題。這是我的測試數據集:length = 100df = pd.DataFrame()df['x1'] = [i/float(length) for i in range(length)]df['x2'] = [i**2 for i in range(length)]df['y'] = df['x1'] + df['x2'] x_value = df.drop(columns = 'y').valuesy_value = df['y'].values.reshape(-1,1)這是我的 t 窗口數據構建函數:def build_data(x_value, y_value ,n_input, n_output):    X, Y = list(), list()    in_start = 0    data_len = len(x_value)    # step over the entire history one time step at a time    for _ in range(data_len):        # define the end of the input sequence        in_end = in_start + n_input        out_end = in_end + n_output        if out_end <= data_len:            x_input = x_value[in_start:in_end] # e.g. t0-t3            X.append(x_input)            y_output = y_value[in_end:out_end] # e.g. t4-t5            Y.append(y_output)        # move along one time step        in_start += 1    return np.array(X), np.array(Y)            X, Y = build_data(x_value, y_value, 1, 2)X 和 Y 的形狀X.shape### (98, 1, 2)Y.shape### (98, 2, 1)對于模型部分,verbose, epochs, batch_size = 1, 20, 16n_neurons =  100n_inputs, n_features  = X.shape[1], X.shape[2]n_outputs = Y.shape[1]model = Sequential()model.add(LSTM(n_neurons, input_shape = (n_inputs, n_features), return_sequences=True))model.add(TimeDistributed(Dense(1)))model.compile(loss='mean_squared_error', optimizer='adam')model.fit(X, Y, epochs=epochs, batch_size=batch_size, verbose=verbose)它發生了錯誤: ValueError: Error when checking target: expected time_distributed_41 to have shape (1, 1) but got array with shape (2, 1)如果使用那X, Y = build_data(x_value, y_value, 2, 2) i.e. input window == output window將是有效的。但我認為它不應該包含這個約束。我怎樣才能克服這個問題?即設置為input window != output window或我應該設置的任何圖層或設置?
查看完整描述

1 回答

?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

您在處理時間維度時遇到形狀不匹配...當您嘗試預測時間維度為 2 的內容時,時間輸入 dim 為 1。因此您的網絡中需要一些能夠從 1 增加到 2 時間的東西方面。我使用了Upsampling1D圖層,下面是一個完整的例子


# create fake data

X = np.random.uniform(0,1, (98,1,2))

Y = np.random.uniform(0,1, (98,2,1))


verbose, epochs, batch_size = 1, 20, 16

n_neurons =  100

n_inputs, n_features  = X.shape[1], X.shape[2]

n_outputs = Y.shape[1]


model = Sequential()

model.add(LSTM(n_neurons, input_shape = (n_inputs, n_features), return_sequences=True))

model.add(UpSampling1D(n_outputs))

model.add(TimeDistributed(Dense(1)))

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

model.fit(X, Y, epochs=epochs, batch_size=batch_size, verbose=verbose)

輸入時間暗淡 > 輸出時間暗淡,您可以使用 Lambda 或 Pooling 操作(如果維度匹配)。下面是一個使用 Lambda 的例子


X = np.random.uniform(0,1, (98,3,2))

Y = np.random.uniform(0,1, (98,2,1))


verbose, epochs, batch_size = 1, 20, 16

n_neurons =  100

n_inputs, n_features  = X.shape[1], X.shape[2]

n_outputs = Y.shape[1]


model = Sequential()

model.add(LSTM(n_neurons, input_shape = (n_inputs, n_features), return_sequences=True))

model.add(Lambda(lambda x: x[:,-n_outputs:,:]))

model.add(TimeDistributed(Dense(1)))

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

model.fit(X, Y, epochs=epochs, batch_size=batch_size, verbose=verbose)


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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