[英]Implement Causal CNN in Keras for multivariate time-series prediction
這個問題是我之前在這里提出的問題的后續: 多特征因果關系CNN-Keras的實現 ,但是,有很多事情我不清楚,我認為這值得一個新問題。 這里討論的模型是根據上面提到的帖子中公認的答案構建的。
我正在嘗試對10個具有5個特征的序列的多元時間序列數據應用因果CNN模型。
lookback, features = 10, 5
過濾器和內核應設置為什么?
膨脹應設置為什么?
lookback
? filters = 32
kernel = 5
dilations = 5
dilation_rates = [2 ** i for i in range(dilations)]
model = Sequential()
model.add(InputLayer(input_shape=(lookback, features)))
model.add(Reshape(target_shape=(features, lookback, 1), input_shape=(lookback, features)))
根據前面提到的答案,需要根據以下邏輯調整輸入的形狀:
Reshape
5輸入特征現在都被視為對於TimeDistributed層的時間層 將Conv1D應用於每個輸入要素時,它認為層的形狀為(10,1)
使用默認的“ channels_last”,因此...
# Add causal layers
for dilation_rate in dilation_rates:
model.add(TimeDistributed(Conv1D(filters=filters,
kernel_size=kernel,
padding='causal',
dilation_rate=dilation_rate,
activation='elu')))
根據提到的答案,需要根據以下邏輯對模型進行重塑:
接下來,因果層現在將依賴地應用於5個輸入要素。
model.add(Reshape(target_shape=(lookback, features * filters)))
next_dilations = 3
dilation_rates = [2 ** i for i in range(next_dilations)]
for dilation_rate in dilation_rates:
model.add(Conv1D(filters=filters,
kernel_size=kernel,
padding='causal',
dilation_rate=dilation_rate,
activation='elu'))
model.add(MaxPool1D())
model.add(Flatten())
model.add(Dense(units=1, activation='linear'))
model.summary()
應該將哪些膨脹設置為代表回溯10?
為什么起因層最初是獨立應用的?
================================================== =========================
lookback, features = 10, 5
filters = 32
kernel = 5
dilations = 5
dilation_rates = [2 ** i for i in range(dilations)]
model = Sequential()
model.add(InputLayer(input_shape=(lookback, features)))
model.add(Reshape(target_shape=(features, lookback, 1), input_shape=(lookback, features)))
# Add causal layers
for dilation_rate in dilation_rates:
model.add(TimeDistributed(Conv1D(filters=filters,
kernel_size=kernel,
padding='causal',
dilation_rate=dilation_rate,
activation='elu')))
model.add(Reshape(target_shape=(lookback, features * filters)))
next_dilations = 3
dilation_rates = [2 ** i for i in range(next_dilations)]
for dilation_rate in dilation_rates:
model.add(Conv1D(filters=filters,
kernel_size=kernel,
padding='causal',
dilation_rate=dilation_rate,
activation='elu'))
model.add(MaxPool1D())
model.add(Flatten())
model.add(Dense(units=1, activation='linear'))
model.summary()
================================================== =========================
丹尼爾,謝謝您的回答。
題:
如果您可以“精確地”解釋數據的結構方式,原始數據是什么以及如何將其轉換為輸入形狀,具有獨立序列,創建滑動窗口等,那么更好。可以了解此過程。
回答:
希望我能正確理解您的問題。
每個功能都是時間序列數據的序列數組。 它們是獨立的,例如它們不是圖像,但是它們彼此之間有些關聯。
這就是為什么我要使用Wavenet的原因,它非常擅長預測單個時間序列數組,但是,我的問題要求我使用多個功能。
問題:
- 為什么起因層最初是獨立應用的?
- 整形后為什么要獨立應用它們?
- 為什么不從一開始就獨立地應用它們?
這個答案有點奇怪。 我不是專家,但是我看不到需要使用TimeDistributed
圖層保留獨立功能。 但是我也不能說它是否能帶來更好的結果。 起初我會說這是不必要的。 但是,它可能帶來更多的智能,因為它可能看到關系涉及兩個要素之間的遙遠步驟,而不是僅僅關注“相同步驟”。 (應該對此進行測試)
但是, 這種方法有一個錯誤 。
旨在交換回溯和特征尺寸的重塑未達到預期的效果。 答案的作者顯然想交換軸 (保留對特征,回溯的解釋),這與重塑不同(將所有內容混合在一起並且數據失去意義)
正確的方法將需要實際的軸交換,例如model.add(Permute((2,1)))
而不是model.add(Permute((2,1)))
。
因此,我不知道這些答案,但是似乎沒有什么可以創造這種需求。 可以肯定的一件事是:您一定會想要依賴部分。 如果模型不考慮要素之間的關系,則模型將無法獲得原始模型的智能。 (除非您很幸運地擁有完全獨立的數據)
LSTM
可以直接與Conv1D
進行比較,並且所使用的形狀完全相同,並且實際上意味着相同,只要您使用channels_last
。
也就是說,形狀(samples, input_length, features_or_channels)
對於LSTM
和Conv1D
都是正確的形狀。 實際上,在這種情況下,功能和渠道是完全一樣的。 變化的是每層在輸入長度和計算方面的工作方式。
內核是conv層內的整個張量,將其與輸入相乘以獲得結果。 內核包括其空間大小( kernel_size
)和filters
數(輸出特征)。 以及自動輸入過濾器。
沒有很多內核,但是有kernel_size
。 內核大小是每個輸出步驟將連接多少個長度的步驟。 (本教程非常適合於關於其功能和內核大小的未知2D卷積-想像一下1D圖像-盡管本教程沒有顯示“濾鏡”的數量,就像1-濾鏡動畫)
filters
的數量與features
的數量直接相關,它們是完全一樣的。
過濾器和內核應設置為什么?
因此,如果您的LSTM
圖層正在使用units=256
,這意味着它將輸出256個要素,則應使用filters=256
,這意味着卷積將輸出256個通道/要素。
但是 , 這並不是規則,您可能會發現使用更多或更少的過濾器會帶來更好的結果,因為這些圖層畢竟會做不同的事情。 不需要所有層都具有相同數量的過濾器!! 在這里,您應該進行參數調整。 測試以查看最適合您的目標和數據的數字。
現在,內核大小是LSTM無法比擬的。 這是模型中新增的內容。
數字3是很常見的選擇。 這意味着卷積將需要三個時間步才能產生一個時間步。 然后滑動一個步驟,進行三個步驟的另一組操作,以產生下一個步驟,依此類推。
膨脹表示卷積濾波器在步驟之間將有多少空間。
dilation_rate=1
需要采取kernel_size
個連續步驟來產生一個步驟。 dilation_rate = 2
卷積需要步驟0、2和4來產生一個步驟。 然后執行步驟1、3、5以產生下一步,依此類推。 應該將哪些膨脹設置為代表回溯10?
range = 1 + (kernel_size - 1) * dilation_rate
因此,內核大小= 3:
如果您可以“精確地”解釋數據的結構方式,原始數據是什么以及如何將其轉換為輸入形狀,具有獨立序列,創建滑動窗口等,那么更好。可以了解此過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.