久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

機器學習博士帶你入門|一文學會如何在Keras中開發(fā)LSTMs(附代碼)

 學術(shù)頭條 2020-11-27

LSTM是一種時間遞歸神經(jīng)網(wǎng)絡(luò),,適合于處理和預測時間序列中間隔和延遲相對較長的重要事件,。在自然語言處理、語言識別等一系列的應用上都取得了很好的效果,。

《Long Short Term Memory Networks with Python》是澳大利亞機器學習專家Jason Brownlee的著作,,里面詳細介紹了LSTM模型的原理和使用。

該書總共分為十四個章節(jié),,具體如下:

第一章:什么是LSTMs,?

第二章:怎么樣訓練LSTMs?

第三章:怎么樣準備LSTMs的數(shù)據(jù),?

第四章:怎么樣在Keras中開發(fā)LSTMs,?(本期內(nèi)容)

第五章:序列預測建模(下周一發(fā)布)

第六章:怎么樣開發(fā)一個Vanilla LSTM模型,?

第七章:怎么樣開發(fā)Stacked LSTMs,?

第八章:開發(fā)CNN LSTM模型

第九章:開發(fā)Encoder-Decoder LSTMs

第十章:開發(fā)Bidirectional LSTMs

第十一章:開發(fā)生成LSTMs

第十二章:診斷和調(diào)試LSTMs

第十三章:怎么樣用LSTMs做預測?

第十四章:更新LSTMs模型

本文的作者對此書進行了翻譯整理之后,,分享給大家,,本文是第四期內(nèi)容。

第一期內(nèi)容為:一萬字純干貨|機器學習博士手把手教你入門LSTM(附代碼資料)

第二期內(nèi)容為:干貨推薦|如何基于時間的反向傳播算法來訓練LSTMs,?

第三期內(nèi)容為:干貨推薦|如何準備用于LSTM模型的數(shù)據(jù)并進行序列預測,?(附代碼)

我們還將繼續(xù)推出一系列的文章來介紹里面的詳細內(nèi)容,和大家一起來共同學習,,支持答疑,!支持答疑,!支持答疑!重要的事情說三遍,!您在學習過程中遇到相關(guān)問題,,都可在文章底部給我們留言!一定會回復你的,!

本文有11000字左右,,閱讀需11分鐘,建議收藏學習,。

4.0 前言

4.0.1 課程目標

本課程的目標是理解如何使用Python中的Keras深度學習庫來定義,、擬合和評價LSTM模型。完成這一課之后,,你會知道:

  • 如何定義一個LSTM模型,,包括怎么樣將你的數(shù)據(jù)變型成為所需要的3D輸入,;

  • 如何擬合和評估你的LSTM模型并且將其用來預測新的數(shù)據(jù);

  • 如何對模型中的內(nèi)部狀態(tài)以及當其重置時進行細粒度的控制。

4.0.2 課程概覽

本課程分為7個部分,,它們是:

  1. 定義模型;

  2. 編譯模型,;

  3. 擬合模型,;

  4. 評價模型;

  5. 用模型做預測,;

  6. LSTM狀態(tài)管理;

  7. 準備數(shù)據(jù)的樣例。

讓我們開始吧!

4.1 定義模型

第一步是定義你的網(wǎng)絡(luò),。Keras中的神經(jīng)網(wǎng)絡(luò)被定義為一系列的層,。這些層的容器是 Sequential類。第一步是創(chuàng)建 Sequential類的實例,。然后你可以創(chuàng)建你的層,,并按照它們應該的連接的順序添加它們。由存儲單元組成的LSTM循環(huán)層被稱為 LSTM(),。一個全連接層經(jīng)常跟著一個LSTM層,,用于輸出一個預測的層被稱為 Dense(),。

例如,我們可以定義一個具有兩個存儲單元的LSTM隱藏層,,連接著帶有一個神經(jīng)元的一個全連接輸出層,,如下:

  1. model = Sequential()

  2. model.add(LSTM(2))

  3. model.add(Dense(1))

表 4.1 定義一個LSTM模型的例子

但是我們也可以通過創(chuàng)建一個層的數(shù)組,并將其傳遞給 Sequential類的構(gòu)造函數(shù)來完成這一步,。

  1. layers = [LSTM(2), Dense(1)]

  2. model = Sequential(layers)

表 4.2 第二個定義一個LSTM模型的例子

網(wǎng)絡(luò)中的第一個隱藏層必須定義期望輸出的數(shù)量,,例如輸入層的形狀。輸入必須是三維的,,由樣本,、時間步長和特征組成,。

  • 樣本,。它們是你數(shù)據(jù)中的行。一個樣本可以是一個序列,。

  • 時間步長,。這些是對特征的過去觀察值,例如滯后的變量,。

  • 特征,。這些是數(shù)據(jù)中的列。

假設(shè)你的數(shù)據(jù)被加載為了一個NumPy數(shù)組,,你可以使用NumPy中的thereshape() 函數(shù)將1D或者2D的數(shù)據(jù)集轉(zhuǎn)換為3D數(shù)據(jù)集,。您可以調(diào)用您的NumPy數(shù)組中的NumPy函數(shù),并傳遞給一個元組的維數(shù)給它,,該維數(shù)就是你需要轉(zhuǎn)成多少維的值,。假設(shè)我們在NumPy數(shù)組中有兩個列的輸入數(shù)據(jù)(X),我們可以把這兩個列當做兩個時間步長來對待,,將其改寫如下:

  1. data = data.reshape((data.shape[0], data.shape[1], 1))

表 4.3 變換有1個時間步長的NumPy數(shù)組的例子

如果你想讓你的2D數(shù)據(jù)中的列成為一個時間步長的特征,,你可以變形,如下:

  1. data = data.reshape((data.shape[0], 1, data.shape[1]))

表 4.4 變換有1個時間步長的NumPy數(shù)組的例子

你可以指定輸入形狀參數(shù),,該參數(shù)期望是一個包含時間步長和特征數(shù)量的元祖,。例如,如果我們有一個單變量序列的兩個時間步長和一個特征,,每行具有兩個之后的觀測值,,則具體如下:

  1. model = Sequential()

  2. model.add(LSTM(5, input_shape=(2,1)))

  3. model.add(Dense(1))

表 4.5 定義LSTM模型的輸入的例子

樣本的數(shù)量不必是指定的。模型假定一個或者多個樣本,,留給你定義的只有時間步長以及特征,。本課的章節(jié)提供了為LSTM模型準備輸入數(shù)據(jù)的附加示例。

把 Sequential模型想象成為一個管道,,一端輸入原始數(shù)據(jù),,另外一端輸出預測結(jié)果。在Keras中這是一個很有用的容器,它傳統(tǒng)上是和一層相聯(lián)系的,,可以可以拆分并添加為一個單獨的層,。這樣可以清楚地表明,它們在數(shù)據(jù)從輸入到預測的轉(zhuǎn)換中的作用,。例如,,激活函數(shù),即變換一個從來自于一層的每一個神經(jīng)元的求和的信號,,可以被提取出來,,并作為一個像層一樣的對象,叫做Activition,添加到 Sequential中,。

  1. model = Sequential()

  2. model.add(LSTM(5, input_shape=(2,1)))

  3. model.add(Dense(1))

  4. model.add(Activation('sigmoid'))

表 4.6 在輸出層帶有sigmoid激活函數(shù)LSTM模型的例子

激活函數(shù)的選擇對于輸出層來說是最重要的,,因為它將決定預測所采用的格式。例如,,下面是一些常見的預測建模問題類型和結(jié)構(gòu)以及在輸出層中使用的標準激活函數(shù):

  • 回歸,。線性激活函數(shù),,或者線性,,神經(jīng)元的數(shù)量和輸出的數(shù)量相匹配,。這是用于全連接層(Dense)層的默認激活函數(shù),。

  • 二分類(2類),。邏輯激活函數(shù),,或者sigmoid,,一個神經(jīng)元的輸出層,。

  • 多分類(大于2類),。Softmax激活函數(shù),,或者softmax,假設(shè)是one hot 編碼輸出模式每個類值一個輸出神經(jīng)元,。

4.2 編譯模型

一旦開發(fā)了我們的網(wǎng)絡(luò),,我們就必須編譯它。編譯是一個有效的步驟,。它將我們所定義的簡單層序列轉(zhuǎn)換成一系列高效的矩陣變換格式,,以便在GPU或者CPU上執(zhí)行,這取決于Keras是如何配置的,。將編譯看做是一個網(wǎng)絡(luò)的預計算步驟,。一個模型建立之后總是需要編譯的。

編譯需要多個參數(shù)被指定,,尤其是那些需要調(diào)整來訓練你網(wǎng)絡(luò)的,。具體來說,用于網(wǎng)絡(luò)訓練的優(yōu)化函數(shù)以及用于評價網(wǎng)絡(luò)的損失函數(shù),,它被優(yōu)化函數(shù)最小化了,。

例如,,下面是編譯指定梯度下降(sgd)和均方差(mse)的損失函數(shù)模型的情況,用于解決回歸類型的問題,。

  1. model.compile(optimizer= 'sgd' , loss= 'mse' )

表 4.7 編譯LSTM模型的例子

或者,,在提供編譯不走的參數(shù)之前創(chuàng)建和配置 optimizer

  1. algorithm = SGD(lr=0.1, momentum=0.3)

  2. model.compile(optimizer=algorithm, loss= 'mse' )

表 4.8 用SGD優(yōu)化算法編譯一個LSTM模型的例子

預測建模問題的類型可對所使用的損失函數(shù)進行約束,。例如,,下面是不同的預測模型類型的一些標準損失函數(shù):

  • 回歸:均方誤差,或者 mean squared error,,簡稱 mse,。

  • 二分類(2類):對數(shù)損失,也叫做交叉熵或者 binary crossentropy,。

  • 多分類(大于2類):多分類的對數(shù)損失,, categorical crossentropy

最常見的優(yōu)化算法是經(jīng)典的隨機梯度下降算法,,但是Keras還支持一套其他擴展的經(jīng)典優(yōu)化算法,,這種算法表現(xiàn)很好,、配置很少,。由于它們通常的性能更好,也許最常用的優(yōu)化算法是:

  • Stochastic Gradient Descent,,或者sgd,。

  • Adam,或者adam,。

  • RMSprop,,或者rmsprop。

最后,,除了損失函數(shù)外,,你也可以指定性能指標(Metrics)來收集擬合你模型時候的信息??偟膩碚f,,最有用的附加性能指標(Metrics)來收集的是分類問題的準確性(例如‘a(chǎn)ccuracy’或者簡稱‘a(chǎn)cc’ )。用來收集的性能指標(Metrics)可以通過性能指標(Metrics)數(shù)組中的名稱或者損失函數(shù)的名字來指定,。例如:

  1. model.compile(optimizer= 'sgd' , loss= 'mean_squared_error' , metrics=[ 'accuracy' ])

表 4.9 用一個性能指標(Metrics)編譯LSTM模型的例子

4.3 擬合模型

一旦網(wǎng)絡(luò)被編譯,,它就可以擬合,這意味著適應訓練數(shù)據(jù)集上的權(quán)重,。擬合網(wǎng)絡(luò)需要指定訓練數(shù)據(jù)集,,包括輸入模式的性能指標(Metrics)X以及和輸出類型匹配的數(shù)組 y。網(wǎng)絡(luò)采用基于時間的反向傳播算法進行訓練,,并根據(jù)優(yōu)化算法和損失函數(shù)特性對模型進行優(yōu)化,。

反向傳播算法要求對網(wǎng)絡(luò)進行訓練數(shù)據(jù)集中的所有序列進行特定數(shù)量的周期或者暴露訓練集中的所有序列,。每個周期(epoch)可以被分為成組的輸入-輸出模式對,這被稱為批次(batches),。這定義了網(wǎng)絡(luò)在一個時代內(nèi)更新權(quán)重之前所暴露的模式的數(shù)量,。它也是一種有效的優(yōu)化,確保在一段時間內(nèi)沒有太多的輸入模式被加載到存儲器中,。

  • Epoch,。遍歷訓練數(shù)據(jù)集中的所有樣本,并更新網(wǎng)絡(luò)權(quán)重,。LSTM可以訓練及時,、幾百或者數(shù)千個周期(epoch)。

  • Batch,。通過訓練數(shù)據(jù)集中的樣本子集,,然后更新網(wǎng)絡(luò)權(quán)值。一個周期(epoch)是由一個或者多個批次(batch)組成的,。

下面是batch size一些常用的配置:

  • batch_size=1,。在每個樣本之后更新權(quán)重,并且該過程被稱為隨機梯度下降,。

  • batch_size=32,。通常的值是32,64和128,調(diào)整來符合預期的效率和模型更新速率,。如果批大?。╞atch size)不是一個周期(epoch)中一個樣本數(shù)量的因素,那么在周期(epoch)的結(jié)尾,,則在結(jié)束時運行剩余樣本的一個額外的批大?。╞atch size)。

  • batch_size=n,。其中,,n是訓練數(shù)據(jù)集的樣本數(shù)。權(quán)重在每個周期(epoch)中被更新,,這個過程被稱為批梯度下降(batch gradient descent),。

batch size為32的小批量梯度下降法(Mini-batch gradient descent)是LSTM的一個常見配置。擬合網(wǎng)絡(luò)的一個例子如下:

  1. model.fit(X, y, batch_size=32, epochs=100)

表 4.10 擬合LSTM模型的例子

一旦擬合,,返回一個歷史對象,,該對象在訓練期間提供對模型姓名的總結(jié)。當編譯模型的時候,,這包含損失和任何的額外的性能指標(Metrics)被指定,,并在每個周期(epoch)被記錄。這些性能指標(Metrics)可以被記錄,、繪制和分析,,以了解網(wǎng)絡(luò)在訓練數(shù)據(jù)集上是過擬合(overfitting)還是欠擬合(underfittting),。

根據(jù)網(wǎng)絡(luò)規(guī)模和訓練數(shù)據(jù)的大小,訓練可能會花費很長的時間,,從秒到數(shù)天,。默認情況下,進度條顯示在每個epoch的命令行上,。這可能會對你造成很多的噪音,,或者會對你的環(huán)境造成問題,比如你在一個交互式的筆記本或者IDE中,。你可以通過將 verbose參數(shù)設(shè)置為2來將顯示的信息量減少到僅損失的每個周期(epoch),。你可以通過設(shè)置 verbose為0。例如:

  1. history = model.fit(X, y, batch_size=10, epochs=100, verbose=0)

表 4.11 擬合一個LSTM模型并檢索無 verbose輸出的歷史的例子

4.4 評價模型

一旦網(wǎng)絡(luò)被訓練,,它就可以被評估,。網(wǎng)絡(luò)可以對訓練數(shù)據(jù)進行評估,但是這不會作為預測模型提供網(wǎng)絡(luò)性能的有用指示,,因為它以前見過所有這些數(shù)據(jù),。我們可以在一個單獨的數(shù)據(jù)集上評估網(wǎng)絡(luò)的性能,在測試期間看不見,。在未來對于看不見的數(shù)據(jù),,這將提供網(wǎng)絡(luò)性能的估計。

該模型評估了所有測試模式的損失,,以及模型編譯時的任何其他度量,,如分類精度,。返回一個評估的度量表,。如,對于使用精度度量編譯模型,,我們可以在新的數(shù)據(jù)集上對其進行評估如下:

  1. loss, accuracy = model.evaluate(X, y)

表 4.12 衡量一個LSTM模型的例子

與網(wǎng)絡(luò)一樣,,提出 verbose輸出的概念是為了評價模型的進度。我們可以通過將 verbose參數(shù)設(shè)置為0來關(guān)閉這個,。

  1. loss, accuracy = model.evaluate(X, y, verbose=0)

表 4.13 衡量一個沒有 verbose輸出的LSTM的例子

4.5 預測模型

一旦對我們的擬合模型的性能感到滿意,,我們可以用它來預測新的數(shù)據(jù)。這就在帶有新輸入模式數(shù)組的模型上調(diào)用 predict()函數(shù)一樣簡單,。例如:

  1. predictions = model.predict(X)

表 4.14 在擬合LSTM模型上預測的例子

預測將以網(wǎng)絡(luò)的輸出層提供的格式返回,。在回歸問題的情況下,這些預測可以直接和線性激活函數(shù)提供問題的格式一樣,。

對于一個二分類問題,,預測可以使第一類的概率數(shù)組,它可以通過舍入轉(zhuǎn)換為1或0,。對于一個多分類問題,,結(jié)果可能是一個概率數(shù)組的形式(假設(shè)是一個one hot編碼輸出變量),,它可能需要使用NumPy的argmax()函數(shù)轉(zhuǎn)換成單類輸出預測。另外,,對于分類問題,,我們可以使用 predict_classes()函數(shù)來自動地將不清晰的預測轉(zhuǎn)換為清晰的整數(shù)類值。

  1. predictions = model.predict_classes(X)

表 4.15 擬合LSTM模型上預測類別的例子

隨著對網(wǎng)絡(luò)的擬合和評估,, verbose被輸出以便用于反映模型預測的進度,。我們可以通過將 verbose參數(shù)設(shè)置為0來關(guān)閉這個。

  1. predictions = model.predict(X, verbose=0)

表 4.16 沒有 verbose輸出時預測的例子

根據(jù)擬合LSTM模型來預測將會在第十三章中詳細的講述,。

4.6 LSTM狀態(tài)管理

每個LSTM存儲單元都保持著積累的內(nèi)部狀態(tài),。這種內(nèi)部狀態(tài)可能需要在網(wǎng)絡(luò)訓練和預測時對序列問題進行詳細的管理。默認情況下,,網(wǎng)絡(luò)中的所有LSTM存儲單元的內(nèi)部狀態(tài)在每個批次之后被重置,,例如,當網(wǎng)絡(luò)權(quán)重被更新時,。這意味著批次大小的配置在三個時期上施加了張力:

  • 學習的正確性,,或更新前處理多少個樣本;

  • 學習的速度,,或者權(quán)重的更新頻率;

  • 內(nèi)部狀態(tài),,或內(nèi)部狀態(tài)重置頻率,。

通過頂一個LSTM層作為狀態(tài),,Keras提供了將內(nèi)部狀態(tài)更新重置的很靈活的方式。這可以通過將LSTM層上的狀態(tài)參數(shù)設(shè)置為true來實現(xiàn),。當使用狀態(tài)LSTM層時,還必須通過設(shè)置輸入形狀參數(shù)來確定網(wǎng)絡(luò)中輸入形狀的批大?。╞atch size),,并且批處理大小必須是訓練數(shù)據(jù)集中樣本數(shù)量的一個因素。

批輸入(batch input)形狀參數(shù)需要一個定義為批處理大小、時間步長和特征的三維數(shù)組,。

例如,我們可以定義一個狀態(tài)LSTM,,在訓練數(shù)據(jù)集上訓練100個樣本,10個批次大?。╞atch size),,1個特征的5個時間步長,如下:

  1. model.add(LSTM(2, stateful=True, batch_input_shape=(10, 5, 1)))

表 4.17 定義一個帶狀態(tài)的LSTM層的例子

狀態(tài)LSTM不會在每個批次結(jié)束時重置內(nèi)部傳狀態(tài),。相反,您可以通過調(diào)用 reset_states()函數(shù)對何時重置內(nèi)部狀態(tài)進行細粒度控制。例如,,我們可能希望在每個周期(epoch)結(jié)束時重置內(nèi)部狀態(tài),,我們可以這樣做:

  1. for i in range(1000):

  2.    model.fit(X, y, epochs=1, batch_input_shape=(10, 5, 1))

  3.    model.reset_states()

表 4.18 一個狀態(tài)LSTM手動迭代訓練批次的例子

在進行預測時,,也必須使用相同狀態(tài)的LSTM中的相同批次大小(batch size),。

  1. predictions = model.predict(X, batch_size=10)

例 4.19 用狀態(tài)LSTM預測的例子

LSTM層的內(nèi)部狀態(tài)也在評估網(wǎng)絡(luò)和進行預測時積累,。因此,,如果使用的是狀態(tài)LSTM,,則必須在驗證數(shù)據(jù)集或者預測之后對網(wǎng)絡(luò)進行重置狀態(tài),。

在默認情況下,,一個周期(epoch)的狀態(tài)被洗牌。在使用神經(jīng)網(wǎng)絡(luò)的多層感知機進行工作的時候這是一個很好的做法,。如果您嘗試在樣本間保存狀態(tài),,那么訓練數(shù)據(jù)集中的樣本順序可能是重要的并且必須保留,。這可以通過設(shè)置 shuffle參數(shù)為False來完成,例如:

  1. for i in range(1000):

  2.    model.fit(X, y, epochs=1, shuffle=False, batch_input_shape=(10, 5, 1))

  3.    model.reset_states()

表 4.20 擬合一個狀態(tài)LSTM時使樣本不shuffle的例子

為了使這個更具體,下面是管理狀態(tài)的3個常見的例子:

  • 在每個序列結(jié)束的時候進行預測,,并且序列是獨立的,。狀態(tài)應該在每個序列之后重置,,通過將批次大小設(shè)置為1,。

  • 長序列被分割成多個子序列(每個樣本具有許多的時間步長)。狀態(tài)應該在網(wǎng)絡(luò)暴露于整個序列之后通過LSTM狀態(tài)化,,關(guān)閉子序列的洗牌(shuffling),,并在每個周期(epoch)之后重置狀態(tài)之后被重置。

  • 一個非常長的子序列被分成多個子序列(每個樣本有許多時間步長),。訓練質(zhì)量比長期內(nèi)部狀態(tài)更重要,,使用128個樣本的批次大小(batch size),,然后更新網(wǎng)絡(luò)權(quán)重和狀態(tài)重置,。

我鼓勵你頭腦風暴你的序列預測問題和網(wǎng)絡(luò)配置的許多不同的框架,測試和選擇那些在預測誤差方面最有希望的模型,。

4.7 準備數(shù)據(jù)的例子

很難理解如何準備您的序列數(shù)據(jù)以輸入到LSTM模型,。通常,圍繞如何定義LSTM模型的輸入層存在混淆,。關(guān)于如何將您的序列數(shù)據(jù)轉(zhuǎn)換為一維或二維的數(shù)字矩陣到LSTM輸入層所需的3D格式也存在混淆,。在這一節(jié)中,您將通過兩個示例來修改序列數(shù)據(jù),,并將輸入層改為LSTM模型,。

4.7.1 單個輸入樣本的LSTM的例子

考慮一個具有多個時間步長和一個特征的序列。例如,,這可以是10個值的序列:

  1. 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0

表 4.21 序列的例子

我們可以將這個序列的數(shù)字定義為NumPy數(shù)組,。

  1. from numpy import array

  2. data = array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0])

表 4.22 將一個序列定義為NumPy數(shù)組的例子

我們可以使用NumPy的 reshape()函數(shù)來將這個一維數(shù)組變成三維數(shù)組,每個時間步長上有1個樣本,、10個時間步長和一個特征,。在數(shù)組上調(diào)用時, reshape()函數(shù)采用一個參數(shù),,它是數(shù)組的新的形狀,。我們不能傳遞任何一組數(shù)字,,變換必須要均勻地重新排列數(shù)組中的數(shù)據(jù)。

  1. data = data.reshape((1, 10, 1))

表 4.23 變換一個數(shù)組的例子

一旦變換了,,我們可以輸出數(shù)組新的形狀,。

  1. print(data.shape)

表 4.24 打印序列新形狀的例子

將所有的都放在一起,完整的例子展示如下:

  1. from numpy import array

  2. data = array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0])

  3. data = data.reshape((1, 10, 1))

  4. print(data.shape)

  5. print(data)

表 4.25 變換一個樣本的例子

運行例子打印單個樣本的3D形狀,。

  1. (1, 10, 1)

  2. [[[ 0.1]

  3.  [ 0.2]

  4.  [ 0.3]

  5.  [ 0.4]

  6.  [ 0.5]

  7.  [ 0.6]

  8.  [ 0.7]

  9.  [ 0.8]

  10.  [ 0.9]

  11.  [ 1. ]]]

表 4.26 單個樣本變型輸出的例子

這個數(shù)據(jù)通過設(shè)置 inpput_shape=(10,1)現(xiàn)在已經(jīng)準備好被用于輸入(X)到LSTM模型中,。

  1. model = Sequential()

  2. model.add(LSTM(32, input_shape=(10, 1)))

  3. ...

表 4.27 定義LSTM模型輸入層的例子

4.7.2 多輸入特征的LSTM例子

考慮到你的模型可能有多個并行序列作為輸入的情況。例如,,下面是有10個值的兩個并行的序列:

  1. series 1: 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0 series 2: 1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1

表 4.28 并行序列的例子

我們可以將這些數(shù)據(jù)定義為2列10行的數(shù)據(jù):

  1. from numpy import array

  2. data = array([ [0.1, 1.0], [0.2, 0.9], [0.3, 0.8], [0.4, 0.7], [0.5, 0.6], [0.6, 0.5], [0.7, 0.4], [0.8, 0.3], [0.9, 0.2], [1.0, 0.1]])

表 4.29 將并行序列定義為一個NumPy數(shù)組的例子

這個數(shù)據(jù)可以被化為具有10個時間步長和2個特征的1個樣本,,它可以變形為3D數(shù)組如下:

  1. data = data.reshape(1, 10, 2)

表 4.30 變形一個序列的例子

將所有這些放在一起,完整的例子顯示如下:

  1. from numpy import array

  2. data = array([ [0.1, 1.0], [0.2, 0.9], [0.3, 0.8], [0.4, 0.7], [0.5, 0.6], [0.6, 0.5], [0.7, 0.4], [0.8, 0.3], [0.9, 0.2], [1.0, 0.1]])

  3. data = data.reshape(1, 10, 2)

  4. print(data.shape)

表 4.31 變形并行序列的例子

運行例子,,打印單個樣本新的3D形狀如下:

  1. (1, 10, 2)

表 4.32 變換并行序列輸出的例子

這個數(shù)據(jù)現(xiàn)在已經(jīng)通過設(shè)置 input_shape=(10,2)準備好被用作輸入(X)到LSTM模型中,。

  1. model = Sequential()

  2. model.add(LSTM(32, input_shape=(10, 2)))

  3. ...

表 4.33 定義LSTM模型輸入層的例子

4.7.3 LSTM輸入的建議

本章節(jié)列出了一些幫助您準備LSTM輸入數(shù)據(jù)的提示:

  • LSTM輸入層必須是3D的;

  • 3個輸入維度的含義是:樣本,、時間步長和特征,。

  • LSTM輸入層在輸入隱藏層上由輸入形狀參數(shù)決定。

  • 輸入形狀參數(shù)采用兩個值的元組,,以減少時間步長和特征的數(shù)量,。

  • 假設(shè)樣本的數(shù)量是1個或者更多。

  • NumPy數(shù)組中的 reshape()函數(shù)可以用來將1D或者2D數(shù)據(jù)變換為3D的,。

  • reshape()函數(shù)將元組作為新的形狀的參數(shù),。

4.8 擴展閱讀

本章節(jié)提供一些用于擴展閱讀的資料。

4.8.1 Keras APIs

  • Keras API for Sequential Models.

  • Keras API for LSTM Layers.

  • Keras API for optimization algorithms.

  • Keras API for loss functions.

4.8.2 其它APIs

  • NumPy reshape() API.

  • NumPy argmax() API.

4.9 擴展

你想深入了解Keras中LSTMs的生命周期嗎,?這個章節(jié)列出了本課程中一些具有挑戰(zhàn)性的擴展,。

  • 列出5個序列預測的問題并重點說明怎么樣將數(shù)據(jù)分割成為樣本、時間步長以及特征,;

  • 列出5個序列預測問題并單獨指出每個輸出層的激活函數(shù),;

  • 研究Keras矩陣以及損失函數(shù),并列出5個可以用于回歸序列預測問題和分類序列預測問題的5個矩陣,;

  • 研究Keras歷史對象并編寫示例代碼來創(chuàng)建Matplotlib的線圖,,該圖是從擬合一個LSTM模型捕獲的矩陣;

  • 列出5個序列預測問題,,以及如何使得網(wǎng)絡(luò)更好地管理每個節(jié)點的內(nèi)部狀態(tài),。

在網(wǎng)上發(fā)布你的擴展并與我分享鏈接。我很想知道你是怎么樣想的,!

4.10 總結(jié)

在本課程中,,你發(fā)現(xiàn)了使用Keras庫的LSTM循環(huán)神經(jīng)網(wǎng)絡(luò)的5步生命周期。特別地,,你學到了:

  • 怎么樣定義一個LSTM模型,,包括怎么樣去將你的數(shù)據(jù)變型為所需要的3D輸入,;

  • 怎么樣定義和評價你的LSTM模型,以及怎么樣使用它在新數(shù)據(jù)上做預測,;

  • 怎么樣對模型中的內(nèi)部狀態(tài)以及當其重置時進行細粒度的控制,。



您在微信公眾號后臺回復“LSTM”可獲取此書的電子版,。

下周一預告:序列預測建模

作者介紹:邵洲,,在讀博士。研究興趣:數(shù)據(jù)挖掘,、學者遷徙研究,。

由清華大學—中國工程院知識智能聯(lián)合研究中心舉辦的知識·智能系列報告會將于2019年1月份舉行第1期,屆時會邀請學術(shù)界的大咖來跟大家分享,,大家最想看到哪個主題,?請投上您寶貴的一票!??!

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多