Python安裝TensorFlow 2、tf.keras和深度學(xué)習(xí)模型的定義
原文鏈接:http://tecdat.cn/?p=15826?
深度學(xué)習(xí)的預(yù)測建模是現(xiàn)代開發(fā)人員需要了解的一項技能。
TensorFlow是Google開發(fā)和維護的首要的開源深度學(xué)習(xí)框架。盡管直接使用TensorFlow可能具有挑戰(zhàn)性,但現(xiàn)代的tf.keras API使得Keras在TensorFlow項目中的使用簡單易用。
使用tf.keras,您可以設(shè)計,擬合,評估和使用深度學(xué)習(xí)模型,從而僅用幾行代碼即可做出預(yù)測。它使普通的深度學(xué)習(xí)任務(wù)(如分類和回歸預(yù)測建模)可供希望完成任務(wù)的普通開發(fā)人員使用。
在本教程中,您將找到使用tf.keras API在TensorFlow中開發(fā)深度學(xué)習(xí)模型的分步指南。
完成本教程后,您將知道:
Keras和tf.keras之間的區(qū)別以及如何安裝和確認TensorFlow是否有效。
tf.keras模型的5個步驟的生命周期以及如何使用順序和功能性API。
如何使用tf.keras開發(fā)MLP,CNN和RNN模型以進行回歸,分類和時間序列預(yù)測。
如何使用tf.keras API的高級功能來檢查和診斷模型。
如何通過減少過度擬合和加速訓(xùn)練來提高tf.keras模型的性能。
這些例子很小。您可以在大約60分鐘內(nèi)完成本教程。
?
TensorFlow教程概述
本教程旨在為您的深度學(xué)習(xí)項目提供tf.keras的完整介紹。
重點是將API用于常見的深度學(xué)習(xí)模型開發(fā)任務(wù);我們不會深入研究深度學(xué)習(xí)的數(shù)學(xué)和理論。
學(xué)習(xí)python深度學(xué)習(xí)的最好方法是邊做邊做。
我設(shè)計了每個代碼示例,以使用最佳實踐并使其獨立,以便您可以將其直接復(fù)制并粘貼到您的項目中,并使其適應(yīng)您的特定需求。
教程分為五個部分。他們是:
安裝TensorFlow和tf.keras
什么是Keras和tf.keras?
如何安裝TensorFlow
如何確認TensorFlow已安裝
深度學(xué)習(xí)模型生命周期
五步模型生命周期
順序模型API(簡單)
功能模型API(高級)
如何開發(fā)深度學(xué)習(xí)模型
開發(fā)多層感知器模型
開發(fā)卷積神經(jīng)網(wǎng)絡(luò)模型
開發(fā)遞歸神經(jīng)網(wǎng)絡(luò)模型
如何使用高級模型功能
如何可視化深度學(xué)習(xí)模型
如何繪制模型學(xué)習(xí)曲線
如何保存和加載模型
如何獲得更好的模型性能
如何減少輟學(xué)過度擬合
如何通過批量歸一化來加速培訓(xùn)
如何在適當(dāng)?shù)臅r間停止訓(xùn)練并盡早停止
您可以使用Python進行深度學(xué)習(xí)
按照您自己的進度完成本教程。
您不需要了解所有內(nèi)容。您的目標是端到端地完成本教程并獲得結(jié)果。您無需在第一遍就了解所有內(nèi)容。列出您要提出的問題。
您不需要先了解數(shù)學(xué)。數(shù)學(xué)是描述算法工作方式的一種緊湊方式,特別是線性代數(shù),概率和統(tǒng)計的工具。這些并不是您可以用來學(xué)習(xí)算法工作方式的唯一工具。您還可以使用代碼并探索具有不同輸入和輸出的算法行為。了解數(shù)學(xué)不會告訴您選擇哪種算法或如何對其進行最佳配置。?
您無需知道算法的工作原理。了解限制以及如何配置深度學(xué)習(xí)算法非常重要。但是學(xué)習(xí)算法可能會在以后出現(xiàn)。您需要在很長一段時間內(nèi)慢慢地建立這種算法知識。?
您無需成為Python程序員。如果您是Python語言的新手,它的語法可能很直觀。就像其他語言一樣,專注于函數(shù)調(diào)用(例如function())和賦值(例如a =“ b”)。這將為您提供大部分幫助。您是一名開發(fā)人員,因此您知道如何真正快速地學(xué)習(xí)語言的基礎(chǔ)知識。剛開始,以后再深入研究細節(jié)。
您無需成為深度學(xué)習(xí)專家。稍后您可以了解各種算法的優(yōu)點和局限性,并且以后可以閱讀大量文章,以深入了解深度學(xué)習(xí)項目的步驟以及使用交叉驗證評估模型技能的重要性。
1.安裝TensorFlow和tf.keras
在本節(jié)中,您將發(fā)現(xiàn)什么是tf.keras,如何安裝以及如何確認它已正確安裝。
1.1什么是Keras和tf.keras?
Keras是一個用Python編寫的開源深度學(xué)習(xí)庫。
該項目由Francois Chollet于2015年啟動。它迅速成為開發(fā)人員的流行框架,甚至成為最受歡迎的深度學(xué)習(xí)庫之一。
在2015-2019年期間,使用TensorFlow,Theano和PyTorch等數(shù)學(xué)庫開發(fā)深度學(xué)習(xí)模型非常麻煩,需要數(shù)十甚至數(shù)百行代碼才能完成最簡單的任務(wù)。這些庫的重點是研究,靈活性和速度,而不是易用性。
Keras之所以受歡迎是因為該API簡潔明了,允許僅用幾行代碼就可以定義,適配和評估標準的深度學(xué)習(xí)模型。
?在2019年,谷歌發(fā)布了他們的TensorFlow深度學(xué)習(xí)庫的新版本(TensorFlow 2),該庫直接集成了Keras API,并將該接口提升為平臺上深度學(xué)習(xí)開發(fā)的默認或標準接口。
這種集成通常稱為tf.keras接口或API(“?tf?”是“?TensorFlow?”的縮寫)。這是為了將其與所謂的獨立Keras開源項目區(qū)分開來。
獨立的Keras。支持TensorFlow,Theano和CNTK后端的獨立開源項目。
tf.keras。Keras API已集成到TensorFlow 2。
Keras中的Keras?API實現(xiàn)被稱為“?tf.keras?”,因為這是引用API時使用的Python習(xí)慣用法。首先,導(dǎo)入TensorFlow模塊并將其命名為“?tf?”;然后,通過調(diào)用tf.keras來訪問Keras?API元素;例如:
# example of tf.keras python idiom
import tensorflow as tf
# use keras API
model = tf.keras.Sequential()
由于TensorFlow是Keras開源項目的事實上的標準后端,因此集成意味著現(xiàn)在可以使用單個庫而不是兩個單獨的庫。此外,獨立的Keras項目現(xiàn)在建議所有將來的Keras開發(fā)都使用tf.keras?API。
目前,我們建議使用TensorFlow后端的多后端Keras的Keras用戶在TensorFlow 2.0中切換到tf.keras。tf.keras得到更好的維護,并與TensorFlow功能具有更好的集成。
?1.2如何安裝TensorFlow
在安裝TensorFlow之前,請確保已安裝Python,例如Python 3.6或更高版本。
如果您沒有安裝Python,則可以使用Anaconda安裝它。?
有很多方法可以安裝TensorFlow開源深度學(xué)習(xí)庫。
在工作站上安裝TensorFlow的最常見,也許也是最簡單的方法是使用pip。
例如,在命令行上,您可以輸入:
sudo pip install tensorflow
本教程中的所有示例都可以在現(xiàn)代CPU上正常工作。如果要為GPU配置TensorFlow,則可以在完成本教程后進行操作。?
1.3如何確認已安裝TensorFlow
一旦安裝了TensorFlow,重要的是確認庫已成功安裝并且可以開始使用它。
?如果TensorFlow未正確安裝或在此步驟上引發(fā)錯誤,則以后將無法運行示例。
創(chuàng)建一個名為versions.py的新文件,并將以下代碼復(fù)制并粘貼到該文件中。
# check version
import tensorflow
print(tensorflow.__version__)
保存文件,然后打開命令行并將目錄更改為保存文件的位置。
然后輸入:
python versions.py
?
輸出版本信息確認TensorFlow已正確安裝。
?
這也向您展示了如何從命令行運行Python腳本。我建議以這種方式從命令行運行所有代碼。
如果收到警告消息
有時,當(dāng)您使用tf.keras?API時,可能會看到警告打印。
這可能包括以下消息:您的硬件支持TensorFlow安裝未配置為使用的功能。
我的工作站上的一些示例包括:
Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
XLA service 0x7fde3f2e6180 executing computations on platform Host. Devices:
StreamExecutor device (0): Host, Default Version
?
這些是信息性消息,不會阻止您執(zhí)行代碼。您現(xiàn)在可以忽略此類型的消息。
既然您知道tf.keras是什么,如何安裝TensorFlow以及如何確認您的開發(fā)環(huán)境正在工作,讓我們看看TensorFlow中深度學(xué)習(xí)模型的生命周期。
2.深度學(xué)習(xí)模型生命周期
在本部分中,您將發(fā)現(xiàn)深度學(xué)習(xí)模型的生命周期以及可用于定義模型的兩個tf.keras API。
2.1五步模型生命周期
模型具有生命周期,這一非常簡單的知識為建模數(shù)據(jù)集和理解tf.keras API提供了基礎(chǔ)。
生命周期中的五個步驟如下:
定義模型。
編譯模型。
擬合模型。
評估模型。
作出預(yù)測。
讓我們依次仔細研究每個步驟。
定義模型
定義模型要求您首先選擇所需的模型類型,然后選擇體系結(jié)構(gòu)或網(wǎng)絡(luò)拓撲。
從API的角度來看,這涉及到定義模型的各層,為每個層配置許多節(jié)點和激活功能,以及將各層連接在一起成為一個內(nèi)聚模型。
可以使用Sequential API或Functional API定義模型,我們將在下一部分中進行介紹。
# define the model
model = ...
編譯模型
編譯模型要求首先選擇要優(yōu)化的損失函數(shù),例如均方誤差或交叉熵。
它還要求您選擇一種算法來執(zhí)行優(yōu)化過程,通常是隨機梯度下降。它還可能要求您選擇任何性能指標,以在模型訓(xùn)練過程中進行跟蹤。
從API的角度來看,這涉及調(diào)用函數(shù)以使用選定的配置來編譯模型,這將準備有效使用已定義的模型所需的適當(dāng)數(shù)據(jù)結(jié)構(gòu)。
可以將優(yōu)化器指定為已知優(yōu)化器類的字符串,例如,“?sgd?”用于隨機梯度下降,或者您可以配置優(yōu)化器類的實例并使用該實例。
有關(guān)受支持的優(yōu)化器的列表,請參見:
tf.keras優(yōu)化器
# compile the model
opt = SGD(learning_rate=0.01, momentum=0.9)
model.compile(optimizer=opt, loss='binary_crossentropy')
三種最常見的損失函數(shù)是:
'?binary_crossentropy?'用于二進制分類。
'?sparse_categorical_crossentropy?'用于多類分類。
“?mse?”(均方誤差)進行回歸。
?
# compile the model
model.compile(optimizer='sgd', loss='mse')
?
有關(guān)受支持的損失函數(shù)的列表,請參見:
tf.keras損失函數(shù)
指標定義為已知指標函數(shù)的字符串列表或要調(diào)用以評估預(yù)測的函數(shù)列表。
有關(guān)支持的指標的列表,請參閱:
tf.keras指標
...
# compile the model
model.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['accuracy'])
擬合模型
擬合模型要求您首先選擇訓(xùn)練配置,例如歷元數(shù)(遍歷訓(xùn)練數(shù)據(jù)集)和批處理大?。v時中用于估計模型誤差的樣本數(shù))。
訓(xùn)練應(yīng)用選定的優(yōu)化算法以最小化選定的損失函數(shù),并使用誤差算法的反向傳播更新模型。
擬合模型是整個過程中很慢的部分,可能需要幾秒鐘到幾小時到幾天不等,具體取決于模型的復(fù)雜性,所使用的硬件以及訓(xùn)練數(shù)據(jù)集的大小。
從API角度來看,這涉及到調(diào)用一個函數(shù)來執(zhí)行訓(xùn)練過程。該功能將阻止(不返回),直到訓(xùn)練過程完成。
...
# fit the model
model.fit(X, y, epochs=100, batch_size=32)
在擬合模型時,進度條將總結(jié)每個時期的狀態(tài)和整個培訓(xùn)過程。通過將“?verbose?”參數(shù)設(shè)置為2,可以將其簡化為每個時期的模型性能的簡單報告。通過將“?verbose?”?設(shè)置為0,可以在訓(xùn)練過程中關(guān)閉所有輸出。
...
# fit the model
model.fit(X, y, epochs=100, batch_size=32, verbose=0)
評估模型
評估模型需要首先選擇用于評估模型的數(shù)據(jù)集。這應(yīng)該是訓(xùn)練過程中未使用的數(shù)據(jù),以便在對新數(shù)據(jù)進行預(yù)測時,我們可以獲得模型性能的無偏估計。
模型評估的速度與您要用于評估的數(shù)據(jù)量成正比,盡管它比訓(xùn)練要快得多,因為模型沒有改變。
從API角度來看,這涉及使用保持數(shù)據(jù)集調(diào)用函數(shù),并獲得損失以及可能報告的其他指標。
...
# evaluate the model
loss = model.evaluate(X, y, verbose=0)
做出預(yù)測
做出預(yù)測是生命周期的最后一步。這就是為什么我們首先要模型的原因。
它要求您具有需要預(yù)測的新數(shù)據(jù),例如,在沒有目標值的情況下。
從API的角度來看,您只需調(diào)用一個函數(shù)即可對類標簽,概率或數(shù)值進行預(yù)測:無論您將模型設(shè)計為要預(yù)測什么。
您可能需要保存模型,然后再加載模型以進行預(yù)測。在開始使用模型之前,您也可以選擇使模型適合所有可用數(shù)據(jù)。
現(xiàn)在我們已經(jīng)熟悉了模型的生命周期,讓我們看一下使用tf.keras API構(gòu)建模型的兩種主要方法:順序模型和功能模型。
...
# make a prediction
yhat = model.predict(X)
2.2順序模型API(簡單)
順序模型API是最簡單的,也是我推薦的API,尤其是在入門時。
之所以稱其為“?順序的?”,是因為它涉及定義一個順序類,并以線性方式從輸入到輸出逐層向模型添加圖層。
下面的示例定義了一個順序MLP模型,該模型接受八個輸入,一個隱藏層包含10個節(jié)點,然后一個輸出層包含一個節(jié)點以預(yù)測數(shù)值。
# example of a model defined with the sequential api
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
# define the model
model = Sequential()
model.add(Dense(10, input_shape=(8,)))
model.add(Dense(1))
?
請注意,網(wǎng)絡(luò)的可見層由第一個隱藏層上的“?input_shape?”參數(shù)定義。這意味著在上面的示例中,模型期望一個樣本的輸入為八個數(shù)字的向量。
順序API易于使用,因為在添加所有圖層之前一直調(diào)用model.add()。
例如,這是一個具有五個隱藏層的深層MLP。
# example of a model defined with the sequential api
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
# define the model
model = Sequential()
model.add(Dense(100, input_shape=(8,)))
model.add(Dense(80))
model.add(Dense(30))
model.add(Dense(10))
model.add(Dense(5))
model.add(Dense(1))
2.3模型API(高級)
模型API更復(fù)雜,但也更靈活。
它涉及顯式地將一層的輸出連接到另一層的輸入。每個連接均已指定。
首先,必須通過Input類定義輸入層,并指定輸入樣本的形狀。定義模型時,必須保留對輸入層的引用。
...
# define the layers
x_in = Input(shape=(8,))
接下來,可以通過調(diào)用層并傳遞輸入層來將完全連接的層連接到輸入。這將返回對該新層中的輸出連接的引用。
...
x = Dense(10)(x_in)
?
然后,我們可以用相同的方式將其連接到輸出層。
...
x_out = Dense(1)(x)
連接后,我們定義一個Model對象并指定輸入和輸出層。下面列出了完整的示例。
# example of a model defined with the functional api
from tensorflow.keras import Model
from tensorflow.keras import Input
from tensorflow.keras.layers import Dense
# define the layers
x_in = Input(shape=(8,))
x = Dense(10)(x_in)
x_out = Dense(1)(x)
# define the model
model = Model(inputs=x_in, outputs=x_out)
這樣,它允許進行更復(fù)雜的模型設(shè)計,例如可能具有多個輸入路徑(分離向量)的模型和具有多個輸出路徑(例如單詞和數(shù)字)的模型。
習(xí)慣了該功能的API可能會很有趣。
有關(guān)功能性API的更多信息,請參見:
TensorFlow中的Keras功能API
既然我們熟悉了模型生命周期以及可用于定義模型的兩個API,那么讓我們來看一下開發(fā)一些標準模型。
?

參考文獻
1.r語言用神經(jīng)網(wǎng)絡(luò)改進nelson-siegel模型擬合收益率曲線分析
2.r語言實現(xiàn)擬合神經(jīng)網(wǎng)絡(luò)預(yù)測和結(jié)果可視化
3.python用遺傳算法-神經(jīng)網(wǎng)絡(luò)-模糊邏輯控制算法對樂透分析
4.用于nlp的python:使用keras的多標簽文本lstm神經(jīng)網(wǎng)絡(luò)分類
5.用r語言實現(xiàn)神經(jīng)網(wǎng)絡(luò)預(yù)測股票實例
6.R語言基于Keras的小數(shù)據(jù)集深度學(xué)習(xí)圖像分類
7.用于NLP的seq2seq模型實例用Keras實現(xiàn)神經(jīng)機器翻譯
8.python中基于網(wǎng)格搜索算法優(yōu)化的深度學(xué)習(xí)模型分析糖
9.matlab使用貝葉斯優(yōu)化的深度學(xué)習(xí)