close

PyTorch是當前主流深度學習框架之一,其設計追求最少的封裝、最直觀的設計,其簡潔優美的特性使得PyTorch代碼更易理解,對新手非常友好。

本文為實戰篇,介紹基於RNN的文本分類,掃描文中的二維碼可觀看視頻講解(限免3天)。

本文將構建和訓練基本的字符級RNN(遞歸神經網絡)來對單詞進行分類。展示如何「從頭開始」進行NLP(自然語言處理)建模的預處理數據,尤其是不使用眾多NLP工具庫提供的許多便利功能,因此讀者可以從系統層面角度了解NLP建模的預處理工作。

字符級RNN將單詞作為一系列字符讀取,之後在每個步驟輸出一個預測結果和「Hidden State」,將其先前的Hidden State輸入每個下一步。這裡將最終的預測作為輸出,即單詞屬於哪個類別。

具體來說,這裡將訓練來自18種起源於不同語言的數千種姓氏,並根據拼寫方式預測名稱的來源,樣例如下。

1

數據準備

數據下載超鏈接:https://download.pytorch.org/tutorial/data.zip。

解壓縮上述數據得到18個txt文件,將它們放置在data/names目錄下。下面提供一段代碼做預處理。

上述代碼輸出如下。

2

將名字轉換為張量

現在已經整理好了所有數據集中的名字,這裡需要將它們轉換為張量以使用它們。為了表示單個字母,這裡使用大小為<1×n_letters>的「one-hot」向量。一個one-hot向量用0填充,但當前字母的索引處的數字為1,例如 「 b」=<0 1 0 0 0 …>。為了用這些向量組成一個單詞,這裡將其中的一些連接成2維矩陣<line_length × 1 × n_letters>。

可以觀察到數據的維度是<line_length×1×n_letters>,而不是<line_length×n_letters>,是因為額外的1維是因為PyTorch假設所有內容都是批量的——在這裡只使用1的batchsize。

代碼如下。

輸出如下。

3

構建神經網絡

在PyTorch中構建遞歸神經網絡(RNN)涉及在多個時間步長上克隆多個RNN層的參數。RNN層保留了Hidden State和梯度,這些狀態完全由PyTorch的計算圖來自動完成維護。這意味着讀者可以以非常「純粹」的方式實現RNN,即只關心前饋網絡(Feed-forward Network)而不需要關注反向傳播(Back Propagation)。

下面樣例中的RNN模塊只有兩個線性層,它接受一個輸入和一個Hidden State,之後網絡輸出結果需要經過一個LogSoftmax層。RNN模型如圖11.1所示。

■圖11.1RNN模型

RNN代碼定義如下。

要運行此網絡,需要傳遞輸入(在本例中為當前字母的Tensor)和先前的Hidden State(首先將其初始化為零)。這裡將返回輸出(每種語言的概率)和下一個Hidden State(將其保留用於下一步)。

為了提高效率,這裡不想為每個步驟都創建一個新的Tensor,因此將使用lineToTensor代替letterToTensor並使用切片。這可以通過預先計算一批(Batch)張量來進一步優化。

可以看到,輸出為<1×n_categories>張量,其中每個項目都是該類別的可能性(更高的可能性更大)。

實操可掃碼觀看(限免3天)

實例講解


PyTorch深度學習實戰



下期預告



深度學習簡介

1. 計算機視覺

2. 自然語言處理

3. 強化學習


深度學習框架

4. PyTorch


PyTorch環境搭建

5. PyTorch環境搭建(Linux和Windows平台)


實戰篇

6. 搭建卷積神經網絡進行圖像分類
7. 圖像風格遷移

4

參考書籍

《PyTorch深度學習實戰-微課視頻版》

數學基礎和深度學習知識點與8個完整的實戰案例相結合,配有詳細的視頻講解,手把手帶你通關深度學習。

ISBN:9787302568209

作者:呂雲翔 劉卓然 主編 關捷雄 歐陽植昊 楊卓謙 華昱雲 陳妙然 黎昆昌 呂可馨 王淥汀 副主編

價格:59.90元

掃碼微店優惠購書


內容簡介

本書在內容安排上十分精良,為便於數學基礎較薄弱的讀者學習,引入了深度學習數學基礎;再由淺入深地以實戰案例講解的方式,對於誤差反向傳播法、卷積運算等進行詳細剖析,使讀者在實現層面上理解;此外還加入了前沿技術,如Batch Normalization等內容。本書提供了8個完整的項目案例、完整的構建過程、詳細的視頻講解以及相應源代碼,使讀者能在實戰案例中,深入完成深度學習的學習與掌握。

5

精彩推薦


微信小程序遊戲開發│猜數字小遊戲(附源碼+視頻)
Flink編程基礎│Scala編程初級實踐
Flink編程基礎│FlinkCEP編程實踐
Flink編程基礎│DataStream API編程實踐
Flink編程基礎│DataSet API編程實踐
數據分析實戰│客戶價值分析
數據分析實戰│價格預測挑戰
數據分析實戰│時間序列預測
數據分析實戰│KaggleTitanic生存預測

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()