《金融大數(shù)據(jù)分析》-課件 第10章 神經(jīng)網(wǎng)絡_第1頁
《金融大數(shù)據(jù)分析》-課件 第10章 神經(jīng)網(wǎng)絡_第2頁
《金融大數(shù)據(jù)分析》-課件 第10章 神經(jīng)網(wǎng)絡_第3頁
《金融大數(shù)據(jù)分析》-課件 第10章 神經(jīng)網(wǎng)絡_第4頁
《金融大數(shù)據(jù)分析》-課件 第10章 神經(jīng)網(wǎng)絡_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第10章

神經(jīng)網(wǎng)絡金融大數(shù)據(jù)學習學習目標掌握人工神經(jīng)網(wǎng)絡的基本概念以及函數(shù)形式理解如何使用神經(jīng)網(wǎng)絡進行預測分類以及回歸問題了解如何訓練神經(jīng)網(wǎng)絡模型以及反向傳播的概念了解神經(jīng)網(wǎng)絡的正則化方法熟悉如何使用程序訓練以及調(diào)用神經(jīng)網(wǎng)絡模型人工神經(jīng)網(wǎng)絡簡介人工神經(jīng)網(wǎng)絡(ArtificialNeuralNetwork)是一種用途廣泛的機器學習方法。其結(jié)構(gòu)跟生物的神經(jīng)結(jié)構(gòu)有類似之處。雖然人工神經(jīng)網(wǎng)絡在二十世紀八十年代就被提出,但是直到十幾年前,這種方法才重新得到重視。究其原因是在過去的幾十年中,我們的訓練數(shù)據(jù)以及計算機算力都獲得了飛躍性的提升,這些發(fā)展都為訓練復雜的人工神經(jīng)網(wǎng)絡提供了支持。在最近的機器學習研究中,人工神經(jīng)網(wǎng)絡展現(xiàn)了其強大的功能及廣泛的應用,在違約預測、圖像識別、聲音辨識、語言翻譯等領(lǐng)域都可得到應用。甚至最新的大語言模型也是依賴于神經(jīng)網(wǎng)絡方法。神經(jīng)網(wǎng)絡的結(jié)構(gòu)圖10.1是一個多層的神經(jīng)網(wǎng)絡圖示。更具體的說,該神經(jīng)網(wǎng)絡是一個前饋神經(jīng)網(wǎng)絡(Feedforwardneuralnetwork)。這種神經(jīng)網(wǎng)絡結(jié)構(gòu)應用非常廣泛,也是更復雜神經(jīng)網(wǎng)絡模型的基礎(chǔ)。接下來來我們會用這個圖來解釋神經(jīng)網(wǎng)絡的構(gòu)成部分。前饋神經(jīng)網(wǎng)絡的基本結(jié)構(gòu)單元是神經(jīng)元(Neuron)。神經(jīng)元被放置在神經(jīng)網(wǎng)絡的不同層里面。接下來,我們對神經(jīng)網(wǎng)絡每個層的功能以及結(jié)構(gòu)進行介紹。神經(jīng)網(wǎng)絡的結(jié)構(gòu):輸入層輸入層是神經(jīng)網(wǎng)絡的第一個層。每一個輸入單元代表的是模型的一個特征。因為在該層中我們并不進行任何運算,因此該層中的單元并不是嚴格意義上的神經(jīng)元。神經(jīng)網(wǎng)絡的結(jié)構(gòu):隱藏層在本圖中,我們有兩個隱藏層。每一個隱藏層中都有五個神經(jīng)元。神經(jīng)元負責處理從上一層輸入該神經(jīng)元的數(shù)值。處理完畢后,輸出一個數(shù)值給下一層的神經(jīng)元。由于這些神經(jīng)元的不負責最終的輸出,因此我們將這些層稱為“隱藏層”。我們可以根據(jù)實際情況增加隱藏層的層數(shù)以增加模型的復雜度。有的神經(jīng)網(wǎng)絡有十個甚至更多的隱藏層。當我們有多個隱藏層相對較多的時候,我們的神經(jīng)網(wǎng)絡的深度也隨之增加。因此層數(shù)較多的神經(jīng)網(wǎng)絡有時會被稱為“深度神經(jīng)網(wǎng)絡”。這些模型也被稱為“深度學習”模型。神經(jīng)網(wǎng)絡的結(jié)構(gòu):隱藏層每一個神經(jīng)元實際代表的是一個函數(shù)。該函數(shù)將輸入的數(shù)據(jù)轉(zhuǎn)換成輸出值。每個神經(jīng)元都將上一層的輸出作為輸入值。以圖10.1為例,第一個隱藏層中的神經(jīng)元都連接到四個輸入節(jié)點,而第二層的神經(jīng)元都連接到五個處于第一個隱藏層的神經(jīng)元。我們可以將每一層上的節(jié)點的值放到一個向量上。這些向量的第一個元素代表常數(shù)項,其他為上一層中得到的數(shù)據(jù)。如輸入層為:神經(jīng)網(wǎng)絡的結(jié)構(gòu):隱藏層

神經(jīng)網(wǎng)絡的結(jié)構(gòu):隱藏層??1??是一個標量,相當于回歸中的常數(shù)項(等同于之前回歸問題中的??0)。在神經(jīng)網(wǎng)絡中,這個系數(shù)經(jīng)常被稱為“偏置”。??1??是一個向量,存儲對應輸入信息的系數(shù)。??1??也被稱為“權(quán)重”。因此,??1??是一個長度為4的向量。第二個隱藏層的神經(jīng)元則是以第一個隱藏層的結(jié)果??1作為輸入:神經(jīng)網(wǎng)絡的結(jié)構(gòu):隱藏層??函數(shù)被稱為激活函數(shù)。激活函數(shù)可以有多種形式。早期的神經(jīng)網(wǎng)絡中,常用的激活函數(shù)是邏輯函數(shù)。如圖10.2所示該函數(shù)的輸出值在0與1之間。最近常用的神經(jīng)網(wǎng)絡的激活函數(shù)則是整流線性函數(shù)(ReLU)。ReLU函數(shù)是如下形式:神經(jīng)網(wǎng)絡的結(jié)構(gòu):隱藏層如果??>0,則??取值為1。如果??的數(shù)值不為正,??(??)則輸出零。圖10.2上也有ReLU函數(shù)。ReLU函數(shù)的特點是一旦??大于0,那么該函數(shù)相當于一個線性函數(shù)關(guān)于??或??的線性函數(shù),反之則輸出0。因此該函數(shù)具有非線性的特點。只有輸入值達到0的閾值,這個函數(shù)才會被“激活”而輸出非零值。1正是這種非線性的特點讓整個神經(jīng)網(wǎng)絡變得強大,包括讓我們的函數(shù)可以表示特征之間復雜的交互作用。神經(jīng)網(wǎng)絡的結(jié)構(gòu):輸出層如果我們需要解決一個分類問題,那么輸出函數(shù)則可以用邏輯函數(shù)來輸出一個分類概率:如果我們需要解決的是多分類問題,也可以用軟最大化(Softmax)函數(shù)作為輸出層的函數(shù)。神經(jīng)網(wǎng)絡的結(jié)構(gòu):輸出層如果我們需要解決一個分類問題,那么輸出函數(shù)則可以用邏輯函數(shù)來輸出一個分類概率:如果我們需要解決的是多分類問題,也可以用軟最大化(Softmax)函數(shù)作為輸出層的函數(shù)。網(wǎng)絡結(jié)構(gòu)的選擇神經(jīng)網(wǎng)絡是一類非常靈活的機器學習方法。在實際應用中,我們需要對具體使用的神經(jīng)網(wǎng)絡結(jié)構(gòu)進行選擇。除了輸入數(shù)據(jù)的特征外,我們還需要選擇隱藏層與輸出層的激活函數(shù)。另外,我們也需要選擇神經(jīng)網(wǎng)絡的層數(shù),以及每一層中的神經(jīng)元數(shù)量。值得注意的是,每一個隱藏層中的神經(jīng)元數(shù)量不需要一致。有研究發(fā)現(xiàn)對于相同參數(shù)量的神經(jīng)網(wǎng)絡,深度的增加比寬度(即隱藏層中神經(jīng)元數(shù)量)的增加更有利于得到對數(shù)據(jù)擬合的效果。同時值得注意的是,由于神經(jīng)網(wǎng)絡的靈活性,使用神經(jīng)網(wǎng)絡需要注意產(chǎn)生過擬合問題。尤其對于數(shù)據(jù)量較小的工作,采用深度神經(jīng)網(wǎng)絡模型很有可能會造成過擬合。因此,在實際使用過程中,需要根據(jù)數(shù)據(jù)的特性對神經(jīng)網(wǎng)絡結(jié)構(gòu)作出最優(yōu)化。為什么使用神經(jīng)網(wǎng)絡研究發(fā)現(xiàn),即使較為簡單的神經(jīng)網(wǎng)絡都可以很好的擬合相對較為復雜的函數(shù)。如圖10.3(上圖)所示,該圖中數(shù)據(jù)由一個三段線性函數(shù)組成。如果我們僅僅使用線性函數(shù),是無法對該數(shù)據(jù)進行很好的擬合的。但是,如圖中所示,我們只需要用含有一個隱藏層(三個隱藏神經(jīng)元)的神經(jīng)網(wǎng)絡就很好的對數(shù)據(jù)進行了擬合。這是因為神經(jīng)網(wǎng)絡中的隱藏神經(jīng)元使用的的非線性函數(shù)以及對他們進行的排列組合使得模型具有極強的靈活性。為什么使用神經(jīng)網(wǎng)絡該圖的下圖更好的詮釋了神經(jīng)網(wǎng)絡的運作機制,在該圖中,我們將網(wǎng)絡的輸出分解到三個隱藏層的神經(jīng)元上。圖中三條實線分別對應的是隱藏神經(jīng)元輸出值乘以對應的輸出層權(quán)重的數(shù)值(??11????1,??12????2,??11????3)。因為這三個神經(jīng)元都輸出一個ReLU形式的非線性函數(shù),因此,他們的值分別可以幫助我們解釋數(shù)據(jù)中一部分斜率的變化。最終得到的神經(jīng)網(wǎng)絡輸出(用虛線表示)也呈現(xiàn)出幾次斜率變化,正好能與數(shù)據(jù)產(chǎn)生擬合。模型訓練

代價函數(shù)代價函數(shù)根據(jù)具體問題來決定。如果我們預測連續(xù)變量(回歸問題),那么我們用方差作為代價函數(shù)。在這個神經(jīng)網(wǎng)絡中有若干??和??參數(shù),調(diào)整這兩個參數(shù)的取值將影響神經(jīng)網(wǎng)絡的預測誤差。因此我們的代價函數(shù)可以用以下形式表示:如果我們需要解決分類問題,那么我們使用交叉熵作為我們的代價函數(shù)(也就是邏輯回歸中的代價函數(shù)):代價函數(shù)對于多分類問題,我們可以使用更復雜的交叉熵代價函數(shù):其中,??為分類數(shù)量。而????代表???對第??類分類的輸出。參數(shù)估計神經(jīng)網(wǎng)絡的參數(shù)估計也是通過最小化代價函數(shù)來進行。因為模型結(jié)構(gòu)相對更復雜,并且因為是網(wǎng)絡結(jié)構(gòu),每一層的輸出都受到上一層數(shù)值的影響,我們無法簡單的方法來最小化代價函數(shù)。更麻煩的是這些代價函數(shù)甚至不是凸函數(shù)。如圖10.4,非凸函數(shù)可能存在多個局部最小值。在尋找代價函數(shù)最小值的過程中,我們可能會遇到局部最小值而停止搜索。因為函數(shù)的復雜性,我們不一定能找到使代價函數(shù)最小化的參數(shù),但是我們能試圖找到一組參數(shù)能達到相對較好的局部最小值。參數(shù)估計接下來,我們可以使用梯度下降來找到合適的??和??參數(shù)。這個過程主要包括三個步驟:1.隨機初始化模型系數(shù)??,??2.反復進行以下兩個步驟:(a)輸入數(shù)據(jù),并用神經(jīng)網(wǎng)絡進行前向傳播,檢測模型表現(xiàn)(b)從模型輸出與實際數(shù)據(jù)進行比較,并用誤差進行對梯度的反向傳播,并用梯度更新模型系數(shù)前向傳播在模型訓練的過程中,我們需要反復檢驗當前模型輸出與目標變量之間的距離。在神經(jīng)網(wǎng)絡中我們將取得??(??(??))的過程稱為前向傳播。因為在這個過程中,我們需要從輸入層的數(shù)據(jù)開始一層一層的計算神經(jīng)元的輸出值,直到我們得到輸出層的結(jié)果。對所有數(shù)據(jù)??(??),??(??),我們進行如下操作:1.下步驟從??=1到??層,進行如下操作(??為隱藏層的層數(shù)):(a)對該層??=1到????的神經(jīng)元的輸出進行計算:2.計算絡模型輸出值:反向傳播

反向傳播反向傳播通過反復進行前向傳播與反向傳播,我們不斷修正??和??參數(shù),從而達到最小化代價函數(shù)的目的。以上步驟看上去十分復雜,但是在實際操作過程中,往往我們使用的機器學習軟件包都已經(jīng)對這些問題進行過處理和優(yōu)化。因此,我們并不需要過多擔心需要實現(xiàn)這些梯度下降的方法。先進的梯度下降算法由于深度神經(jīng)網(wǎng)絡的訓練復雜度相比之前介紹的方法復雜度極大提高,并且訓練過程中我們經(jīng)常需要使用海量的數(shù)據(jù),我們通常會使用隨機梯度下降。具體算法在此我們不做過多介紹,表10.1將梯度下降與隨機梯度下降進行簡單對比。神經(jīng)網(wǎng)絡正則化隨著神經(jīng)網(wǎng)絡深度的增加,我們模型的參數(shù)也會隨之大量增加。因此,神經(jīng)網(wǎng)絡往往復雜度非常高。所以,我們很可能會有過擬合的問題。為了達到更好的模型表現(xiàn),我們需要對神經(jīng)網(wǎng)絡模型進行的正則化,從而達到減少方差的效果。提前結(jié)束訓練另一種簡單的方法是提前結(jié)束訓練。理論上來說,我們應該反復進行正向傳播以及反向傳播,從而達到最小化代價函數(shù)的目的。但由于神經(jīng)網(wǎng)絡模型的靈活性,過多的進行正向及反向傳播有可能造成過擬合問題。為了達到減小方差的目的,我們可以考慮提前結(jié)束訓練。這樣我們的參數(shù)與訓練數(shù)據(jù)的程度會得到控制,從而減小模型的方差。這種方法的好處是不需要對模型進行過多的修改,并且非常容易執(zhí)行。簡單來說,我們只要在訓練之前選擇指定一個訓練的次數(shù)即可。當我們完成訓練次數(shù)之后,就算梯度還可以繼續(xù)下降,我們也終止對模型的繼續(xù)訓練。范數(shù)正則化如同回歸問題一樣,我們可以使用類似于嶺回歸的正則化項。以回歸問題為例,我們可以修改我們的代價函數(shù)至如下:這種方法中,我們需要尋找到一個合適的正則化參數(shù)??。好處是我們只需要對模型進行很小的修改。雖然我們也可以利用類似于套索回歸的范數(shù)正則化,但是在神經(jīng)網(wǎng)絡中利用嶺回歸正則化更加多見。集成學習法我們也可以使用多個神經(jīng)網(wǎng)絡進行集成學習。最終,我們將多個神經(jīng)網(wǎng)絡的預測進行綜合并輸出結(jié)果。集成學習法可以很好的減少過擬合問題。但是訓練多個神經(jīng)網(wǎng)絡可能會造成訓練成本過高的問題。隨機暫退法隨機暫退法(Dropout)是一種可應用于神經(jīng)網(wǎng)絡的正則化方法。我們可以設定一個暫退參數(shù)??。在每一層中,我們隨機刪除??×????個神經(jīng)元(????是第??層中神經(jīng)元(或輸入單元)的數(shù)量。對于每一個訓練數(shù)據(jù),我們都對網(wǎng)絡進行隨機暫退,同時我們也對每一層輸出值進行相應的縮放(縮放比例為1/(1???))。這種方法的思路與隨機森林有相似之處,因為每次我們都排除掉一部分信息。這種方法除了可以達到減小方差的效果。同時,也不會過多的增加計算量。常用的神經(jīng)網(wǎng)絡結(jié)構(gòu)1.前饋神經(jīng)網(wǎng)絡:我們在這一章節(jié)中主要介紹的是前饋神經(jīng)網(wǎng)絡。這一類網(wǎng)絡有著廣泛的應用,也是很多其他種類的神經(jīng)網(wǎng)絡結(jié)構(gòu)的基礎(chǔ)。我們可以用這一類網(wǎng)絡結(jié)構(gòu)來預測連續(xù)變量(如股價變化),或分類變量(如貸款違約)。2.卷積神經(jīng)網(wǎng)絡:卷積神經(jīng)網(wǎng)絡主要針對圖像識別。比如,我們可以針對輸入的圖片來判斷其中的文字,或物體。卷積神經(jīng)網(wǎng)絡的出現(xiàn)為經(jīng)濟與金融提供了研究更多的數(shù)據(jù)源。在之后的章節(jié)中,我們將介紹如何將圖像識別等技術(shù)應用到金融經(jīng)濟中。而卷積神經(jīng)網(wǎng)絡則是進行這些工作的強有力的工具。常用的神經(jīng)網(wǎng)絡結(jié)構(gòu)3.循環(huán)神經(jīng)網(wǎng)絡:循環(huán)神經(jīng)網(wǎng)絡既可以用來分析時間序列數(shù)據(jù)(如經(jīng)濟增長,股票回報等),也可以被用來獲取音頻中的信息。甚至,它在翻譯和其他文本處理的工作中也有廣泛的應用。但是循環(huán)神經(jīng)網(wǎng)絡也有一些缺點。最大缺點是訓練效率很低。因此,在近期的技術(shù)發(fā)展中,很多應用已經(jīng)被Trans_x0002_former模型取代。4.Transformer模型:Transformer模型是在近期得到了非常廣泛應用的神經(jīng)網(wǎng)絡架構(gòu)。Transformer在很多場景中完全的超越了循環(huán)神經(jīng)網(wǎng)絡的表現(xiàn)。在近期的發(fā)展中,這一類模型成為了以BERT和GPT為代表的大語言模型(LargeLanguageModel)的基礎(chǔ)架構(gòu)。在稍后的章節(jié)中,我們將介紹大語言模型的理論基礎(chǔ)及應用并更詳細的介紹Transformer模型的結(jié)構(gòu)。使用scikit-learn訓練神經(jīng)網(wǎng)絡讀取名為’ols_training.csv’的CSV文件中的數(shù)據(jù),并將其存儲在df變量中定義一個特征列表X,包含三個特征名稱’pps’,‘bm’,‘roa’選取df數(shù)據(jù)中eps_basic作為目標變量,并保存在變量y中df=pd.read_csv("ols_training.csv")X=df[['pps','bm','roa']]y=df['eps_basic']使用scikit-learn訓練神經(jīng)網(wǎng)絡將數(shù)據(jù)集劃分為訓練集和測試集,測試集占總數(shù)據(jù)的20%,訓練集占總數(shù)據(jù)的80%,隨機種子設為42以使結(jié)果可重復其中,將用于訓練的特征變量數(shù)據(jù)存儲在X_train中,用于測試的特征變量數(shù)據(jù)存儲在X_test中,用于訓練的目標變量數(shù)據(jù)存儲在y_train中,用于測試的目標變量數(shù)據(jù)存儲在y_test中X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)使用scikit-learn訓練神經(jīng)網(wǎng)絡創(chuàng)建一個StandardScaler對象,用于對數(shù)據(jù)進行標準化處理使用scaler的fit_transfrom方法計算數(shù)據(jù)集X_train的平均值和標準偏差并對數(shù)據(jù)進行標準化處理,之后將標準化后的結(jié)果儲存在X_train_scaled中使用transform方法對X_test中的特征數(shù)據(jù)進行標準化處理,并使用與X_train同樣的標準化標準,即X_train的均值和標準差,之后將標準化后的結(jié)果儲存在X_test_scaled中scaler=StandardScaler()X_train_scaled=scaler.fit_transform(X_train)X_test_scaled=scaler.transform(X_test)使用scikit-learn訓練神經(jīng)網(wǎng)絡創(chuàng)建一個MLPRegressor對象nn,用于進行多層感知機回歸分析,設置4個隱藏層,隱藏層依次有10,20,20,10個神經(jīng)元,激活函數(shù)為ReLU,隨機種子設為42,最大迭代次數(shù)為200次nn=MLPRegressor(hidden_layer_sizes=(10,20,20,10),activation='relu',random_state=42,m)nn.fit(X_train_scaled,y_train)使用fit方法對X_train_scaled和y_train進行多層感知機回歸分析使用scikit-learn訓練神經(jīng)網(wǎng)絡使用訓練好的模型對測試集特征變量進行預測,并將結(jié)果儲存在y_pred中y_pred=nn.predict(X_test_scaled)mse=mean_squared_error(y_test,y_pred)print(mse)計算預測結(jié)果與真實值之間的均方誤差(MSE),并將結(jié)果保存在mse中.打印均方誤差。使用scikit-learn訓練神經(jīng)網(wǎng)絡顯示損失曲線獲取損失曲線,該損失曲線記錄了神經(jīng)網(wǎng)絡在訓練過程中的損失變化情況loss_curve=nn.loss_curve_plt.figure(figsize=(10,5))plt.plot(loss_curve,label='LossCurve')plt.title('LossCurvefortheThree-LayerNeuralNetwork')plt.xlabel('Iterations')plt.ylabel('Loss')plt.legend()plt.grid(True)plt.savefig('losscurve.png')plt.show()使用Pytorch訓練神經(jīng)網(wǎng)絡使用pandas存儲數(shù)據(jù)導入torch庫中的nn模塊,用于構(gòu)建神經(jīng)網(wǎng)絡模型導入torch中的數(shù)據(jù)加載器模塊,用于數(shù)據(jù)集的處理importpandasaspdimportnumpyasnpimporttorchfromtorchimportnn使用Pytorch訓練神經(jīng)網(wǎng)絡導入sklearn庫model_selection模塊的train_test_split,用于劃分訓練集和測試集導入sklearn庫preprocessing模塊的StandardScaler,用于數(shù)據(jù)標準化處理fromtorch.utils.dataimportTensorDataset,DataLoaderfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportStandardScaler使用Pytorch訓練神經(jīng)網(wǎng)絡定義一個特征列表X,包含三個特征名稱’pps’,‘bm’,‘roa’,并轉(zhuǎn)換為float32類型選取df數(shù)據(jù)中eps_basic作為目標變量,并轉(zhuǎn)換為float32類型,保存在變量y中df=pd.read_csv('ols_training.csv')X=df[['pps','bm','roa']].values.astype(np.float32)y=df['eps_basic'].values.astype(np.float32)使用Pytorch訓練神經(jīng)網(wǎng)絡將數(shù)據(jù)集劃分為訓練集和測試集,測試集占總數(shù)據(jù)的20%,訓練集占總數(shù)據(jù)的80%,隨機種子設為42以使結(jié)果可重復其中,將用于訓練的特征變量數(shù)據(jù)存儲在X_train中,用于測試的特征變量數(shù)據(jù)存儲在X_test中,用于訓練的目標變量數(shù)據(jù)存儲在y_train中,用于測試的目標變量數(shù)據(jù)存儲在y_test中X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)使用Pytorch訓練神經(jīng)網(wǎng)絡創(chuàng)建一個StandardScaler對象,用于對數(shù)據(jù)進行標準化處理使用scaler的fit_transfrom方法計算數(shù)據(jù)集X_train的平均值和標準偏差并對數(shù)據(jù)進行標準化處理,之后將標準化后的結(jié)果儲存在X_train_scaled中使用transform方法對X_test中的特征數(shù)據(jù)進行標準化處理,并使用與X_train同樣的標準化標準,即X_train的均值和標準差,之后將標準化后的結(jié)果儲存在X_test_scaled中scaler=StandardScaler()X_train_scaled=scaler.fit_transform(X_train)X_test_scaled=scaler.transform(X_test)使用Pytorch訓練神經(jīng)網(wǎng)絡將標準化處理后的訓練數(shù)據(jù)和測試數(shù)據(jù)轉(zhuǎn)換為torchtensor,分別儲存在X_train_tensor,X_test_tensor,y_train_tensor,y_test_tensor中,方便后續(xù)的深度學習計算。torch.tensor(y_train).view(-1,1)將numpyarray變成一個tensor。-1說明讓程序自動計算tensor中元素的數(shù)量。因為y中只有一個變量,因此第二個緯度的大小為1。X_train_tensor=torch.tensor(X_train_scaled)y_train_tensor=torch.tensor(y_train).view(-1,1)X_test_tensor=torch.tensor(X_test_scaled)y_test_tensor=torch.tensor(y_test).view(-1,1)使用Pytorch訓練神經(jīng)網(wǎng)絡創(chuàng)建TensorDataset對象,將訓練數(shù)據(jù)和測試數(shù)據(jù)傳入,分別儲存在train_data和test_data中,生成可以用于后續(xù)深度學習計算的數(shù)據(jù)集train_data=TensorDataset(X_train_tensor,y_train_tensor)test_data=TensorDataset(X_test_tensor,y_test_tensor)使用Pytorch訓練神經(jīng)網(wǎng)絡我們使用minibatch設置每個batch的樣本數(shù)為64。說明每一次訓練中,我們不會使用所有的數(shù)據(jù),而是隨機選擇64個數(shù)據(jù)點。這是隨機梯度下降的一種形式。batch_size=64創(chuàng)建DataLoader對象train_loader和test_loader,將訓練數(shù)據(jù)集,測試數(shù)據(jù)集和batchsize傳入,生成可以用于后續(xù)深度學習訓練的數(shù)據(jù)加載器train_loader=DataLoader(dataset=train_data,batch_size=batch_size,shuffle=True)test_loader=DataLoader(dataset=test_data,batch_size=batch_size,shuffle=False)使用Pytorch訓練神經(jīng)網(wǎng)絡檢查是否有可用的GPU,如果有則使用GPU進行計算,否則使用CPU進行計算。在深度神經(jīng)網(wǎng)絡中,GPU可以極大增加訓練速度。device=torch.device('cuda'iftorch.cuda.is_available()else'cpu')print(torch.cuda.is_available())使用Pytorch訓練神經(jīng)網(wǎng)絡定義神經(jīng)網(wǎng)絡結(jié)構(gòu)定義一個名為NN的神經(jīng)網(wǎng)絡模型類,繼承自torch.nn.Module,包含以下結(jié)構(gòu):1.調(diào)用父類__init__方法,初始化網(wǎng)絡模型,包含多個線性層和激活層:(a)第一層全連接層,輸入特征維度3,輸出維度100,非線性激活函數(shù)ReLU(b)第二層全連接層,輸入維度100,輸出維度100,非線性激活函數(shù)ReLU(c)第三層全連接層,輸入維度100,輸出維度100,非線性激活函數(shù)ReLU(d)第四層全連接層,輸入維度100,輸出維度50,非線性激活函數(shù)ReLU(e)最后一層全連接層,輸入維度50,輸出維度12.定義前向傳播過程,輸入x經(jīng)過網(wǎng)絡模型得到輸出classNN(nn.Module):def__init__(self):super(NN,self).__init__()work=nn.Sequential(nn.Linear(3,100),nn.ReLU(),nn.Linear(100,100),nn.ReLU(),第10章神經(jīng)網(wǎng)絡192nn.Linear(100,100),nn.ReLU(),nn.Linear(100,50),nn.ReLU(),nn.Linear(50,1))defforward(self,x):returnwork(x)使用Pytorch訓練神經(jīng)網(wǎng)絡實例化模型,并將其移動到指定設備上運行model=NN().to(device)定義損失函數(shù)為均方誤差損失函數(shù)criterion=nn.MSELoss()定義優(yōu)化器為Adam優(yōu)化器,學習率設置為0.001,權(quán)重衰減設置為1e-5optimizer=torch.optim.Adam(model.parameters(),lr=0.001,weight_decay=1e-5)使用Pytorch訓練神經(jīng)網(wǎng)絡定義訓練模型函數(shù)train_model,它接受五個參數(shù):model(要訓練的模型),criterion(損失函數(shù)),optimizer(優(yōu)化器),train_loader(訓練數(shù)據(jù)加載器),以及epochs(訓練輪數(shù),默認為10000輪)其結(jié)構(gòu)具體包含:1.將模型設置為訓練模式2.遍歷模型訓練的輪數(shù),每次循環(huán)都會從訓練加載器train_loader中獲取一批新的輸入和目標數(shù)據(jù)3.將輸入數(shù)據(jù)和目標數(shù)據(jù)移動到指定設備上4.清空梯度緩存5.模型對輸入數(shù)據(jù)進行前向傳播得到輸出6.根據(jù)損失函數(shù)計算模型輸出和目標之間的損失7.反向傳播,計算梯度值8.根據(jù)梯度值更新模型參數(shù)9.每10次訓練打印一次當前訓練數(shù)和損失值deftrain_model(model,criterion,optimizer,train_loade

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論