R語(yǔ)言基于遞歸神經(jīng)網(wǎng)絡(luò)RNN的溫度時(shí)間序列預(yù)測(cè)
原文鏈接:http://tecdat.cn/?p=20335?
?
在本文中,我們將介紹三種提高循環(huán)神經(jīng)網(wǎng)絡(luò)性能和泛化能力的高級(jí)技術(shù)。我們演示有關(guān)溫度預(yù)測(cè)問(wèn)題的三個(gè)概念,我們使用建筑物屋頂上的傳感器的時(shí)間數(shù)據(jù)序列。
?
概述
在本文中,我們將介紹三種提高循環(huán)神經(jīng)網(wǎng)絡(luò)性能和泛化能力的高級(jí)技術(shù)。在最后,您將了解有關(guān)將循環(huán)網(wǎng)絡(luò)與Keras一起使用的大部分知識(shí)。您可以訪問(wèn)來(lái)自建筑物屋頂上的傳感器的時(shí)間數(shù)據(jù)序列,例如溫度,氣壓和濕度,這些數(shù)據(jù)點(diǎn)可用于預(yù)測(cè)最后一個(gè)數(shù)據(jù)點(diǎn)之后24小時(shí)的溫度。這是一個(gè)相當(dāng)具有挑戰(zhàn)性的問(wèn)題,它說(shuō)明了使用時(shí)間序列時(shí)遇到的許多常見(jiàn)困難。
我們將介紹以下技術(shù):
?刪除層/每層的單位數(shù)(模型) 如L1或L2正則化所述,過(guò)度復(fù)雜的模型更有可能過(guò)度擬合,可以使用刪除來(lái)抵抗重復(fù)圖層的過(guò)擬合。
堆疊循環(huán)層?—這增加了網(wǎng)絡(luò)的表示能力(以更高的計(jì)算負(fù)荷為代價(jià))。
雙向循環(huán)層?—這些層以不同的方式向循環(huán)網(wǎng)絡(luò)提供相同的信息,從而提高準(zhǔn)確性。
溫度預(yù)測(cè)問(wèn)題
在本節(jié)的所有示例中,您將使用生物地球化學(xué)研究所的氣象站記錄的?天氣時(shí)間序列數(shù)據(jù)集。
在此數(shù)據(jù)集中,幾年中每10分鐘記錄14個(gè)不同的量(例如空氣溫度,大氣壓力,濕度,風(fēng)向等)。原始數(shù)據(jù)可追溯到2003年,但此示例僅限于2009-2016年的數(shù)據(jù)。該數(shù)據(jù)集非常適合學(xué)習(xí)使用數(shù)字時(shí)間序列。您將使用它來(lái)構(gòu)建一個(gè)模型,該模型將最近的一些數(shù)據(jù)(幾天的數(shù)據(jù)點(diǎn))作為輸入,并預(yù)測(cè)未來(lái)24小時(shí)的氣溫。
下載并解壓縮數(shù)據(jù),如下所示:
unzip(
"climate.csv.zip",
exdir = "~/Downloads/climate"
)
我們看一下數(shù)據(jù)。
library(tibble)
library(readr)
glimpse(data)

這是溫度(攝氏度)隨時(shí)間變化的曲線圖。在此圖上,您可以清楚地看到溫度的年度周期。
ggplot(data, aes(x = 1:nrow(data), y = `degC`)) + geom_line()

?
這是溫度數(shù)據(jù)的前10天變化圖。由于數(shù)據(jù)每10分鐘記錄一次,因此您每天可獲得144個(gè)數(shù)據(jù)點(diǎn)。
ggplot(data[1:1440,], aes(y = `degC`)) + geom_line()

?
?
如果您根據(jù)過(guò)去幾個(gè)月的數(shù)據(jù)來(lái)嘗試預(yù)測(cè)下個(gè)月的平均溫度,由于數(shù)據(jù)的年度周期性可靠,因此問(wèn)題很容易解決。但是從幾天的數(shù)據(jù)來(lái)看,溫度更加混亂。這個(gè)時(shí)間序列每天都可以預(yù)測(cè)嗎?
準(zhǔn)備數(shù)據(jù)
問(wèn)題的確切表達(dá)如下:給定的數(shù)據(jù)可以追溯到?lookback
?時(shí)間步長(zhǎng)(一個(gè)時(shí)間步長(zhǎng)為10分鐘)并在每個(gè)steps
?時(shí)間步長(zhǎng)處進(jìn)行采樣?,您可以預(yù)測(cè)該delay
?時(shí)間步長(zhǎng)中的溫度?嗎?使用以下參數(shù)值:
lookback = 1440
?—觀察將追溯到10天。steps = 6
?—觀測(cè)將在每小時(shí)一個(gè)數(shù)據(jù)點(diǎn)進(jìn)行采樣。delay = 144
?—目標(biāo)將是未來(lái)的24小時(shí)。
首先,您需要做兩件事:
將數(shù)據(jù)預(yù)處理為神經(jīng)網(wǎng)絡(luò)可以使用格式。數(shù)據(jù)已經(jīng)是數(shù)字了,因此您無(wú)需進(jìn)行任何向量化。但是數(shù)據(jù)中的每個(gè)時(shí)間序列的度量尺度都不同(例如,溫度通常在-20至+30之間,但以毫巴為單位的大氣壓約為1,000)。您將獨(dú)立地標(biāo)準(zhǔn)化每個(gè)時(shí)間序列。
編寫(xiě)一個(gè)生成器函數(shù),該函數(shù)將獲取當(dāng)前的浮點(diǎn)數(shù)據(jù)數(shù)組,并生成來(lái)自最近的過(guò)去以及將來(lái)的目標(biāo)溫度的成批數(shù)據(jù)。由于數(shù)據(jù)集中的樣本是高度冗余的(樣本?N?和樣本?N??+ 1將具有大多數(shù)相同的時(shí)間步長(zhǎng)),因此顯式分配每個(gè)樣本會(huì)很浪費(fèi)。相反,您將使用原始數(shù)據(jù)即時(shí)生成樣本。
生成器函數(shù)是一種特殊類(lèi)型的函數(shù),可以反復(fù)調(diào)用該函數(shù)以獲得一系列值。
例如,sequence_generator()
?下面的函數(shù)返回一個(gè)生成器函數(shù),該?函數(shù)產(chǎn)生無(wú)限的數(shù)字序列:
gen <- sequence_generator(10)
gen()
[1] 10
gen()
[1] 11
生成器的當(dāng)前狀態(tài)value
?是在函數(shù)外部定義的?變量。superassignment(<<-
)用于從函數(shù)內(nèi)部更新此狀態(tài)。
生成器函數(shù)可以通過(guò)返回值NULL
來(lái)指示完成?。
首先,將先前讀取的R數(shù)據(jù)幀轉(zhuǎn)換為浮點(diǎn)值矩陣(我們丟棄包含文本時(shí)間戳記的第一列):
data <- data.matrix(data[,-1])
然后,您可以通過(guò)減去每個(gè)時(shí)間序列的平均值并除以標(biāo)準(zhǔn)差來(lái)預(yù)處理數(shù)據(jù)。您將使用前200,000個(gè)時(shí)間步作為訓(xùn)練數(shù)據(jù),因此僅在這部分?jǐn)?shù)據(jù)上計(jì)算均值和標(biāo)準(zhǔn)差以進(jìn)行標(biāo)準(zhǔn)化。
train_data <- data[1:200000,]
data <- scale(data, center = mean, scale = std)
您將使用的數(shù)據(jù)生成器的代碼如下。它產(chǎn)生一個(gè)list??(samples, targets)
,其中?samples
?是一批輸入數(shù)據(jù),并且?targets
?是目標(biāo)溫度的對(duì)應(yīng)數(shù)組。它采用以下參數(shù):
data
?—原始的浮點(diǎn)數(shù)據(jù)數(shù)組。lookback
?—是輸入數(shù)據(jù)應(yīng)該包括多少個(gè)時(shí)間步。delay
?—目標(biāo)應(yīng)該在未來(lái)多少步。min_index
?和?max_index
?—data
?數(shù)組中的索引,?用于定義從中提取時(shí)間步長(zhǎng)。保留一部分?jǐn)?shù)據(jù)用于驗(yàn)證和另一部分用于測(cè)試。shuffle
?—隨機(jī)整理樣本還是按時(shí)間順序繪制樣本。batch_size
?—每批樣品數(shù)。step
?—采樣數(shù)據(jù)的時(shí)間段(以時(shí)間為單位)。您將其設(shè)置為6,以便每小時(shí)繪制一個(gè)數(shù)據(jù)點(diǎn)。
?
現(xiàn)在,讓我們使用abstract?generator
?函數(shù)實(shí)例化三個(gè)生成器:一個(gè)用于訓(xùn)練,一個(gè)用于驗(yàn)證以及一個(gè)用于測(cè)試。每個(gè)人都將查看原始數(shù)據(jù)的不同時(shí)間段:訓(xùn)練生成器查看前200,000個(gè)時(shí)間步,驗(yàn)證生成器查看隨后的100,000個(gè)時(shí)間步,而測(cè)試生成器查看其余的時(shí)間步。
lookback <- 1440
step <- 6
# 為了查看整個(gè)驗(yàn)證集,需要從valu gen中提取多少步驟
val_steps <- (300000 - 200001 - lookback) / batch_size
# 為了查看整個(gè)測(cè)試集,需要從test\u gen中提取多少步驟
test_steps <- (nrow(data) - 300001 - lookback) / batch_size
常識(shí)性的非機(jī)器學(xué)習(xí)基準(zhǔn)
在開(kāi)始使用黑盒深度學(xué)習(xí)模型解決溫度預(yù)測(cè)問(wèn)題之前,讓我們嘗試一種簡(jiǎn)單的常識(shí)性方法。它將用作健全性檢查,并將建立一個(gè)基線,您必須超過(guò)它才能證明機(jī)器學(xué)習(xí)模型的有用性。當(dāng)您要解決尚無(wú)已知解決方案的新問(wèn)題時(shí),此類(lèi)常識(shí)性基準(zhǔn)可能會(huì)很有用。一個(gè)經(jīng)典的例子是不平衡的分類(lèi)任務(wù),其中某些類(lèi)比其他類(lèi)更為常見(jiàn)。如果您的數(shù)據(jù)集包含90%的A類(lèi)實(shí)例和10%的B類(lèi)實(shí)例,則分類(lèi)任務(wù)的常識(shí)性方法是在提供新樣本時(shí)始終預(yù)測(cè)“ A”。此類(lèi)分類(lèi)器的總體準(zhǔn)確度為90%,因此,任何基于學(xué)習(xí)的方法都應(yīng)超過(guò)90%的分?jǐn)?shù),以證明其有用性。
在這種情況下,可以安全地假定溫度時(shí)間序列是連續(xù)的(明天的溫度可能會(huì)接近今天的溫度)。因此,常識(shí)性的方法是始終預(yù)測(cè)從現(xiàn)在開(kāi)始24小時(shí)的溫度將等于現(xiàn)在的溫度。我們使用平均絕對(duì)誤差(MAE)指標(biāo)評(píng)估這種方法:
mean(abs(preds - targets))
評(píng)估循環(huán)。
for (step in 1:val_steps) {
preds <- samples[,dim(samples)[[2]],2]
mae <- mean(abs(preds - targets))
batch_maes <- c(batch_maes, mae)
}
print(mean(batch_maes))
MAE為0.29。由于溫度數(shù)據(jù)已標(biāo)準(zhǔn)化為以0為中心并且標(biāo)準(zhǔn)偏差為1。它的平均絕對(duì)誤差為0.29 x?temperature_std
?攝氏度:2.57?C。
celsius_mae <- 0.29 * std[[2]]
那是一個(gè)相當(dāng)大的平均絕對(duì)誤差。
基本的機(jī)器學(xué)習(xí)方法
就像在嘗試機(jī)器學(xué)習(xí)方法之前建立常識(shí)性基準(zhǔn)很有用一樣,在研究復(fù)雜且計(jì)算量大的模型之前,嘗試簡(jiǎn)單的機(jī)器學(xué)習(xí)模型也很有用。
下面的清單顯示了一個(gè)全連接的模型,該模型首先將數(shù)據(jù)展平,然后在兩個(gè)密集層中運(yùn)行它。請(qǐng)注意,最后一個(gè)致密層上缺少激活函數(shù),這對(duì)于回歸問(wèn)題是很典型的。您將MAE用作損失函數(shù)。由于您評(píng)估的數(shù)據(jù)與通常方法完全相同,而且度量標(biāo)準(zhǔn)完全相同,因此結(jié)果可以直接比較。
model_sequential() %>%
layer_flatten(input_shape = c(lookback / step, dim(data)[-1])) %>%
history <- model %>% fit_generator(
train_gen,
steps_per_epoch = 500,
epochs = 20,
validation_data = val_gen,
validation_steps = val_steps
)
讓我們顯示驗(yàn)證和訓(xùn)練的損失曲線。

?
某些驗(yàn)證損失接近無(wú)學(xué)習(xí)基準(zhǔn),但不可靠。這首先顯示了具有此基準(zhǔn)的優(yōu)點(diǎn):事實(shí)證明,要實(shí)現(xiàn)這一目標(biāo)并不容易。您的常識(shí)包含很多機(jī)器學(xué)習(xí)模型無(wú)法訪問(wèn)的有價(jià)值的信息。
您可能想知道,如果存在一個(gè)簡(jiǎn)單的,性能良好的模型,為什么您正在訓(xùn)練的模型找不到并對(duì)其進(jìn)行改進(jìn)?因?yàn)檫@種簡(jiǎn)單的解決方案不是您的訓(xùn)練設(shè)置所需要的。您要在其中尋找解決方案的模型的空間已經(jīng)相當(dāng)復(fù)雜。當(dāng)您正在尋找具有兩層網(wǎng)絡(luò)空間的復(fù)雜模型解決方案時(shí),即使在技術(shù)上是假設(shè)簡(jiǎn)單,性能良好的基準(zhǔn)模型也可能無(wú)法學(xué)習(xí)。通常,這是機(jī)器學(xué)習(xí)的一個(gè)相當(dāng)大的局限性:除非對(duì)學(xué)習(xí)算法進(jìn)行硬編碼來(lái)尋找特定類(lèi)型的簡(jiǎn)單模型,
基準(zhǔn)模型
第一種全連接的方法效果不好,但這并不意味著機(jī)器學(xué)習(xí)不適用于此問(wèn)題。先前的方法首先使時(shí)間序列平坦化,從而從輸入數(shù)據(jù)中刪除了時(shí)間概念。我們將嘗試一個(gè)遞歸序列處理模型-它應(yīng)該非常適合此類(lèi)序列數(shù)據(jù),因?yàn)榕c第一種方法不同,正是因?yàn)樗昧藬?shù)據(jù)點(diǎn)的時(shí)間順序。
您將使用Chung等人開(kāi)發(fā)的?GRU層。在2014年。GRU層使用與LSTM相同的原理工作,但是它們有所簡(jiǎn)化,因此運(yùn)行起來(lái)更高效。在機(jī)器學(xué)習(xí)中到處都可以看到計(jì)算復(fù)雜度和效率之間的折衷。
model_sequential() %>%
layer_gru(units = 32, input_shape = list(NULL, dim(data)[[-1]])) %>%
layer_dense(units = 1)
model %>% fit_generator(
train_gen,
steps_per_epoch = 500,
epochs = 20,
結(jié)果如下圖所示。您可以超越基線模型,證明了機(jī)器學(xué)習(xí)的價(jià)值以及循環(huán)網(wǎng)絡(luò)的優(yōu)越性。

?
驗(yàn)證MAE轉(zhuǎn)化為非標(biāo)準(zhǔn)化后的平均絕對(duì)誤差為2.35?C。
丟棄(dropout)對(duì)抗過(guò)度擬合
從訓(xùn)練和驗(yàn)證曲線可以明顯看出該模型是過(guò)擬合的:訓(xùn)練和驗(yàn)證損失在經(jīng)過(guò)幾個(gè)時(shí)期后開(kāi)始出現(xiàn)較大差異。您已經(jīng)熟悉了應(yīng)對(duì)這種現(xiàn)象的經(jīng)典技術(shù):丟棄(dropout),它隨機(jī)將圖層的輸入單元清零,以便打破該圖層所暴露的訓(xùn)練數(shù)據(jù)中的偶然相關(guān)性。但是,如何在循環(huán)網(wǎng)絡(luò)中正確應(yīng)用dropout并不是一個(gè)簡(jiǎn)單的問(wèn)題。道在遞歸層之前應(yīng)用dropout會(huì)阻礙學(xué)習(xí),而不是幫助進(jìn)行正則化。2015年,Yarin Gal作為其博士學(xué)位論文的一部分??在貝葉斯深度學(xué)習(xí)中,確定了使用遞歸網(wǎng)絡(luò)進(jìn)行dropout的正確方法:應(yīng)在每個(gè)時(shí)間步上應(yīng)用相同的dropout模式,而不是隨時(shí)間步長(zhǎng)隨機(jī)變化的dropout模式。
Yarin Gal使用Keras進(jìn)行了研究,并幫助將這種模型直接構(gòu)建到Keras循環(huán)層中。Keras中的每個(gè)循環(huán)圖層都有兩個(gè)與dropout相關(guān)的參數(shù):??dropout
,一個(gè)浮點(diǎn)數(shù),用于指定圖層輸入單元的dropout率;以及?recurrent_dropout
,用于指定循環(huán)單元的dropout率。由于使用丟失dropout進(jìn)行正則化的網(wǎng)絡(luò)始終需要更長(zhǎng)的時(shí)間才能完全收斂,因此您需要兩倍的時(shí)間訓(xùn)練網(wǎng)絡(luò)。
model_sequential() %>%
layer_gru(units = 32, dropout = 0.2, recurrent_dropout = 0.2,
下圖顯示了結(jié)果。在前20個(gè)時(shí)期中,您不再過(guò)度擬合。但是,盡管您的評(píng)估分?jǐn)?shù)較為穩(wěn)定,但您的最佳分?jǐn)?shù)并沒(méi)有比以前低很多。

?
堆疊循環(huán)圖層
因?yàn)槟辉傩枰紤]過(guò)度擬合的問(wèn)題,而是似乎遇到了性能瓶頸,所以您應(yīng)該考慮增加網(wǎng)絡(luò)的容量?;叵胍幌峦ㄓ脵C(jī)器學(xué)習(xí)工作流程的描述:在過(guò)擬合成為主要障礙之前,最好增加網(wǎng)絡(luò)容量,這通常是個(gè)好主意(假設(shè)您已經(jīng)采取了基本步驟來(lái)減輕過(guò)擬合的情況,例如使用丟棄)。只要您的擬合度不會(huì)太差,就很可能會(huì)出現(xiàn)容量不足的情況。
通常,通過(guò)增加層中的單元數(shù)或添加更多層來(lái)增加網(wǎng)絡(luò)容量。遞歸層堆疊是構(gòu)建功能更強(qiáng)大的遞歸網(wǎng)絡(luò)的經(jīng)典方法:例如,當(dāng)前為Google Translate算法提供動(dòng)力的是七個(gè)大型LSTM層的堆疊。
為了在Keras中將遞歸層堆疊在一起,所有中間層都應(yīng)返回其完整的輸出序列(3D張量),而不是最后一個(gè)時(shí)間步的輸出。
model_sequential() %>%
layer_gru(units = 32,
dropout = 0.1,
recurrent_dropout = 0.5,
return_sequences = TRUE,
input_shape = list(NULL, dim(data)[[-1]])) %>%
layer_gru(units = 64, activation = "relu",
dropout = 0.1,
recurrent_dropout = 0.5) %>%
下圖顯示了結(jié)果。您可以看到,添加的圖層確實(shí)改善了結(jié)果,盡管效果不明顯。您可以得出兩個(gè)結(jié)論:
因?yàn)椴恍枰^(guò)度擬合的問(wèn)題,所以可以安全地增加圖層大小以尋求驗(yàn)證損失的改善。但是,這具有不可忽略的計(jì)算成本。
添加層并沒(méi)有很大的幫助,因此此時(shí)您可能會(huì)看到網(wǎng)絡(luò)容量增加帶來(lái)的收益遞減。

?
使用雙向RNN
本節(jié)介紹的最后一種技術(shù)稱(chēng)為?雙向RNN。雙向RNN是常見(jiàn)的RNN變體,在某些任務(wù)上可以提供比常規(guī)RNN更高的性能。它在自然語(yǔ)言處理中經(jīng)常使用-您可以將其稱(chēng)為用于深度語(yǔ)言處理的深度學(xué)習(xí)“瑞士軍刀”。
RNN特別依賴(lài)于順序或時(shí)間的:它們按順序處理輸入序列的時(shí)間步長(zhǎng),重新排列時(shí)間步長(zhǎng)可以完全改變RNN從序列中提取的表示形式。這正是它們?cè)谛蛄袉?wèn)題(例如溫度預(yù)測(cè)問(wèn)題)上表現(xiàn)良好的原因。雙向RNN利用RNN的序列敏感性:它包含使用兩個(gè)常規(guī)RNN(例如?layer_gru
?和?layer_lstm
?),每個(gè)RNN都沿一個(gè)方向(按時(shí)間順序)處理輸入序列,然后合并它們的表示形式。通過(guò)雙向處理序列,雙向RNN可以捕獲被單向RNN忽略的模式。
值得注意的是,本節(jié)中的RNN層已按時(shí)間順序處理了序列。訓(xùn)練與本節(jié)第一個(gè)實(shí)驗(yàn)中使用相同的單GRU層網(wǎng)絡(luò),您將獲得如下所示的結(jié)果。

?
結(jié)果表明在這種情況下,按時(shí)間順序進(jìn)行的處理至關(guān)重要。因?yàn)椋旱讓拥腉RU層通常更容易記住最近的過(guò)去,自然地,較新的天氣數(shù)據(jù)點(diǎn)比舊數(shù)據(jù)點(diǎn)對(duì)問(wèn)題的預(yù)測(cè)能力強(qiáng)。因此,該層的時(shí)間順序版本必將勝過(guò)逆序版本。對(duì)于包括自然語(yǔ)言在內(nèi)的許多其他問(wèn)題,情況并非如此:從直覺(jué)上講,單詞在理解句子中的重要性通常并不取決于其在句子中的位置。讓我們?cè)贚STM IMDB示例中嘗試相同的技巧。
# 作為特征考慮的單詞數(shù)量
max_features <- 10000
c(c(x_train, y_train), c(x_test, y_test)) %<-% imdb
# 反轉(zhuǎn)序列
x_train <- lapply(x_train, rev)
x_test <- lapply(x_test, rev)
model <- keras_model_sequential() %>%
layer_embedding(input_dim = max_features, output_dim = 128) %>%
layer_lstm(units = 32) %>%
您獲得的性能幾乎與按時(shí)間順序排列的LSTM相同。值得注意的是,在這樣的文本數(shù)據(jù)集上,逆序處理與按時(shí)間順序處理一樣有效,這證實(shí)了以下假設(shè):盡管單詞順序??在理解語(yǔ)言中確實(shí)很重要,?但?您使用的順序并不重要。重要的是,經(jīng)過(guò)逆向序列訓(xùn)練的RNN將學(xué)習(xí)與原始序列訓(xùn)練的RNN不同的表達(dá)方式。在機(jī)器學(xué)習(xí)中,?不同?的表示?總是值得開(kāi)發(fā)的:它們提供了一個(gè)新的視角來(lái)查看您的數(shù)據(jù),捕獲了其他方法遺漏的數(shù)據(jù)方面,因此可以幫助提高任務(wù)的性能。
雙向RNN利用此思想來(lái)改進(jìn)按時(shí)間順序排列的RNN的性能。
在Keras中實(shí)例化雙向RNN。讓我們?cè)贗MDB情緒分析任務(wù)上嘗試一下。
model <- keras_model_sequential() %>%
layer_embedding(input_dim = max_features, output_dim = 32) %>%
bidirectional(
layer_lstm(units = 32)
model %>% compile(
optimizer = "rmsprop",
loss = "binary_crossentropy",
它的性能比您在上一節(jié)中嘗試過(guò)的常規(guī)LSTM稍好,達(dá)到了89%以上的驗(yàn)證精度。它似乎也可以更快地過(guò)擬合,這并不奇怪,因?yàn)殡p向?qū)拥膮?shù)是按時(shí)間順序排列的LSTM的兩倍。通過(guò)一些正則化,雙向方法可能會(huì)在此任務(wù)上表現(xiàn)出色。
現(xiàn)在讓我們?cè)跍囟阮A(yù)測(cè)任務(wù)上嘗試相同的方法。
model_sequential() %>%
bidirectional(
layer_gru(units = 32), input_shape = list(NULL, dim(data)[[-1]])
model %>% fit_generator(
train_gen,
steps_per_epoch = 500,
epochs = 40,
這和常規(guī)的layer_gru
一樣好?。原因很容易理解:所有預(yù)測(cè)能力都必須來(lái)自網(wǎng)絡(luò)中按時(shí)間順序排列的部分,因?yàn)楸娝苤?,按時(shí)間順序排列的部分在此任務(wù)上的表現(xiàn)嚴(yán)重不足,在這種情況下,最近的樣本比過(guò)去的樣本重要得多。
更進(jìn)一步
為了提高溫度預(yù)測(cè)問(wèn)題的性能,您可以嘗試其他許多方法:
調(diào)整堆疊設(shè)置中每個(gè)循環(huán)圖層的單位數(shù)。
調(diào)整
RMSprop
?優(yōu)化器使用的學(xué)習(xí)率?。嘗試使用?
layer_lstm
?代替?layer_gru
。嘗試在循環(huán)層的頂部使用更大的緊密連接的回歸變量:即,更大的密集層,甚至一疊密集層。
不要忘記最終在測(cè)試集上運(yùn)行性能最佳的模型(就驗(yàn)證MAE而言),否則,您將開(kāi)發(fā)過(guò)度擬合驗(yàn)證集的結(jié)構(gòu)。
我們可以提供一些準(zhǔn)則,建議在給定問(wèn)題上可能起作用或不起作用的因素,但是最終,每個(gè)問(wèn)題都是唯一的;您必須憑經(jīng)驗(yàn)評(píng)估不同的策略。當(dāng)前沒(méi)有理論可以提前準(zhǔn)確地告訴您應(yīng)該如何最佳地解決問(wèn)題。您必須迭代。

最受歡迎的見(jiàn)解
1.用于NLP的Python:使用Keras的多標(biāo)簽文本LSTM神經(jīng)網(wǎng)絡(luò)分類(lèi)
2.Python中利用長(zhǎng)短期記憶模型LSTM進(jìn)行時(shí)間序列預(yù)測(cè)分析 – 預(yù)測(cè)電力消耗數(shù)據(jù)
3.python在Keras中使用LSTM解決序列問(wèn)題
4.Python中用PyTorch機(jī)器學(xué)習(xí)分類(lèi)預(yù)測(cè)銀行客戶流失模型
5.R語(yǔ)言多元Copula GARCH 模型時(shí)間序列預(yù)測(cè)
6.在r語(yǔ)言中使用GAM(廣義相加模型)進(jìn)行電力負(fù)荷時(shí)間序列分析
7.R語(yǔ)言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于預(yù)測(cè)時(shí)間序列數(shù)
8.R語(yǔ)言估計(jì)時(shí)變VAR模型時(shí)間序列的實(shí)證研究分析案例
9.用廣義加性模型GAM進(jìn)行時(shí)間序列分析