好書快翻--《Python深度學習第二版》第四章 開始學習神經網絡:分類和迴歸

博主有話說:首先感謝您閱讀這篇博客!博主做大數據技術,平時喜歡閱讀英文原版大數據技術書籍,並翻譯成中文,分享出來。如要及時看到翻譯的章節,請關注博主微信公衆號 登峯大數據,微信號  bigdata_work 

本章包括

  • 真實世界的機器學習工作流程的第一個例子

  • 處理向量數據的分類問題

  • 處理向量數據上的連續迴歸問題

這一章的目的是讓你開始使用神經網絡來解決實際問題。您將鞏固您從第2章和第3章中獲得的知識,並將您所學到的知識應用到三個新的任務中,這三個任務涵蓋了神經網絡的三個最常見的用例----二分類、多類分類和標量回歸:

  • 將電影評論分爲正面和負面(二元分類)

  • 按主題對新聞進行分類(多級分類)

  • 根據房地產數據估算房價(標量回歸)

這些示例將是您第一次接觸完整機器學習工作流:瞭解數據預處理、基本模型體系結構原則和模型評估。在本章結束時,將能夠使用神經網絡來處理向量數據上的簡單分類和迴歸任務。在第五章中,將開始建立一個更有原則的、理論驅動的機器學習理解。

分類和迴歸術語表

分類和迴歸涉及到許多專業術語。在前面的例子中,已經遇到過其中的一些術語,在以後的章節中,將會看到更多這樣的例子。它們有精確的、特定於機器學習的定義,應該熟悉它們:

  • 樣本或輸入(Sampleinput)——進入模型的一個數據點。

  • 預測或輸出(Prediction o或output)——從模型中得出的東西。

  • 目標(Target )——真相。根據外部數據源,模型應該能夠理想地預測什麼。

  • 預測誤差或損失值——模型預測與目標之間距離的度量。

  • 類(Classes )——在分類問題中可以選擇的一組可能的標籤。例如,在對貓和狗的圖片進行分類時,“dog”和“cat”是兩個類別。

  • 標籤(Label)—分類問題中類標註的特定實例。例如,如果圖片被標註爲dog類,那麼“dog”就是圖片的標籤(Label)。

  • 標註——數據集的所有targets,通常由人類收集。

  • 二分類——一個分類任務,其中每個輸入樣本都應該被分成兩個互斥的類別。

  • 多分類——一個分類任務,其中每個輸入樣本應該被分成兩個以上的類別:例如,分類手寫數字。

  • 多標籤分類——一個分類任務,其中每個輸入樣本可以分配多個標籤。例如,一個給定的圖像可能同時包含一隻貓和一隻狗,應該用"cat“標籤和"dog”標籤進行標註。每張圖像的標籤數量通常是可變的。

  • 標量回歸——目標爲連續標量值的任務。預測房價就是一個很好的例子:不同的目標價格形成一個連續的空間。

  • 向量迴歸——目標是一組連續的值的任務:例如,一個連續向量。如果你要對多個值進行迴歸(例如圖像中包圍框的座標),就需要進行向量迴歸。

  • 小批量或批量——模型同時處理的一小組樣本(通常在8到128之間)。爲了方便GPU上的內存分配,採樣數通常爲2的冪。在訓練時,使用一個小批處理來計算應用於模型權重的單個梯度下降更新。

4.1 電影評論的分類:一個二分類的例子

二分類是最常見的機器學習問題之一。在本例中,您將學習根據評論的文本內容將電影評論分爲正面和負面。

4.1.1 IMDB數據集

您將使用IMDB數據集:一組來自Internet電影數據庫的50,000個高度極化的評論。他們被分成25000個訓練評論數據集和25000個測試評論數據集,每一組都有50%的負面評論和50%的正面評論。

與MNIST數據集一樣,IMDB數據集也是用Keras打包的。它已經經過預處理:評論(單詞序列)已經轉換爲整數序列,其中每個整數表示字典中的一個特定單詞。這使我們能夠專注於模型構建、訓練和評估。在後續章節中,將學習如何從頭開始處理原始文本輸入。

下面的代碼將加載數據集(當您第一次運行它時,大約80 MB的數據將被下載到您的機器上)。

#代碼清單4.1 加載IMDB數據集
from tensorflow.keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(
    num_words=10000)

參數num_words=10000意味着只保留訓練數據中最頻繁出現的前10,000個單詞。罕見的詞語將被廢棄。這樣就可以處理指定大小的向量數據。如果我們不設置這個限制,我們將在訓練數據中使用88,585個獨特的單詞,這是沒必要的。這些詞很多隻出現在一個樣本中,因此不能有意義地用於分類。

變量train_data和test_data是評論列表;每個評論都是單詞索引的列表(編碼的單詞序列)。train_label和test_label是0和1的列表,其中0代表負面評論,1代表正面評論:

>>> train_data[0]
[1, 14, 22, 16, ... 178, 32]
>>> train_labels[0]
1

因爲你限制加載了最常見的10,000個單詞,所以沒有單詞索引會超過10,000:

>>> max([max(sequence) for sequence in train_data])
9999

更有趣的是,下面教你如何快速將這些評論翻譯成英語單詞:

#代碼清單4.2 將評論解碼爲文本
#word_index是一個將單詞映射到整數索引的字典。
word_index = imdb.get_word_index()
reverse_word_index = dict(
    #將其反轉,將整數索引映射到單詞
    [(value, key) for (key, value) in word_index.items()])
decoded_review = ' '.join(
    #解碼。注意,索引被偏移3,因爲0、1和2是爲“padding”、“start of sequence”和“unknown”保留的索引。
    [reverse_word_index.get(i - 3, '?') for i in train_data[0]])

4.1.2 數據準備

你不能直接把整數列表輸入神經網絡。它們都有不同的長度,但是神經網絡期望處理連續的數據批。你必須把你的列表變成張量。有兩種方法:

閱讀完整版,請加公衆號。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章