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