深度學習小課堂:如何利用遞迴神經網路生成文字?
作者:Gilbert Tanner
深度學習可用於做許多有趣的事情,但人們通常可能會覺得只有那些最聰明的工程師才能建立這樣的應用程式。但事實並非如此。
通過Keras和其他高階深度學習庫,無論對深度學習理論和內部工作的理解如何,每個人都可以建立和使用深度學習模型。
在這篇文章中,我們將看看如何使用遞迴神經網路以亞瑟·柯南·道爾(Sir Arthur Conan Doyle)的風格,使用他的著作《夏洛克·福爾摩斯的歷險記》作為我們的資料集建立新文字。
我們可以從免費數字圖書館Gutenberg的網站獲取資料。(http://www.gutenberg.org/ebooks/1661?msg=welcome_stranger)
我們只需要將這本書儲存為文字(.txt)檔案,並刪除文字中嵌入的Gutenberg頁首和頁尾。如果你不想自己這樣做,可以從我的Github獲取文字以及本文中涉及的所有程式碼。
https://github.com/TannerGilbert/Keras-Tutorials/tree/master/4.%20LSTM%20Text%20Generation
遞迴神經網路
遞迴神經網路(RNN)是用於順序資料的現有技術演算法。這是因為他們可以通過內部記憶記住他們以前的輸入。
在本文中,並不會深入探討遞迴神經網路如何工作,但如果你有興趣,可以觀看解釋遞迴神經網路(RNN)的工作原理視訊。
https://programmingwithgilbert.firebaseapp.com/videos/machine-learning-explained/recurrent-neural-networks-lstm-explained
或者可以檢視Niklas Donges的這篇精彩文章。
https://towardsdatascience.com/recurrent-neural-networks-and-lstm-4b601dd822a5
建立資料集
像往常一樣,我們將開始建立資料集。為了使遞迴神經網路(RNN)能夠使用我們提供的文字資料,我們需要將其轉換為數值。然後,我們將建立一個字元序列作為我們的X值,並使用以下字元作為我們的Y值。最後,我們將資料轉換為布林值陣列。
首先,我們將載入資料並建立從字元到整數和整數到字元的對映:
為了獲得我們可用於訓練模型的有價值資料,我們將把資料分成長度為40個字元的子序列。然後我們將資料轉換為布林陣列。
遞迴神經網路模型
儘管建立遞迴神經網路(RNN)聽起來很複雜,但使用Keras實現起來相當容易。我們將建立一個具有以下結構的簡單遞迴神經網路(RNN):
(1)LSTM層:將學習序列
(2)密集(完全連線)層:每個唯一字元的一個輸出神經元
(3)Softmax啟用:將輸出轉換為概率值
我們將使用RMSprop優化器和分類Crossentropy損失函式。https://keras.io/losses/#categorical_crossentropy
輔助函式
為了看到我們的模型在訓練時所做的改進,我們將建立兩個輔助函式。這兩個函式來自Keras團隊的官方LSTM文字生成示例。
https://github.com/keras-team/keras/blob/master/examples/lstm_text_generation.py
第一個輔助函式將從輸出(概率陣列)中取樣索引。它有一個名為temperature(溫度)的引數,它定義了函式在建立文字時的自由度。第二個將在每個週期結束時生成具有四個不同temperature(溫度)的文字,因此我們可以看到我們的模型如何。
我們還將定義另外兩個回撥函式。第一個叫做ModelCheckpoint(模型檢查點)。它會在每個時期儲存我們的模型,減少損失。
另一個回撥將減少每次學習平臺的學習率。
訓練模型並生成新文字
對於訓練,我們需要選擇batch_size和想要訓練的週期數。對於batch_size,選擇128,這只是一個任意數字。只訓練了5個週期的模型,所以不需要等待這麼長時間,但如果你想要,可以訓練更多。
訓練輸出:
為了自己生成文字,我們將建立一個類似於on_epoch_end函式的函式。它將採用隨機起始索引,從文字中取出接下來的40個字元,然後使用它們進行預測。 作為引數,我們將傳遞想要生成的文字的長度以及生成的文字的多樣性。
現在我們可以通過呼叫generate_text函式來建立文字:
生成文字:
結論
遞迴神經網路是一種處理順序資料的技術,因為它們可以通過內部儲存器記住最後的輸入。它們幾乎在每個連續問題上都達到了最先進的效能,並被大多數大公司使用。遞迴神經網路(RNN)可用於生成特定作者風格的文字。
建立文字生成遞迴神經網路(RNN)的步驟如下:
(1)建立或收集資料集
(2)構建遞迴神經網路(RNN)模型
(3)以隨機句子為起點建立新文字
這個專案的細節可以在這裡找到。鼓勵任何人使用程式碼,也許可以更改資料集和預處理步驟,看看會發生什麼。
你可以通過很多方法改進模型以獲得更好的輸出。其中一些是:
(1)使用更復雜的網路結構(更多LSTM和密集層)
(2)訓練更多週期
(3)使用batch_size
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31509949/viewspace-2218481/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 深度學習之RNN(迴圈神經網路)深度學習RNN神經網路
- 深度學習迴圈神經網路詳解深度學習神經網路
- NLP與深度學習(二)迴圈神經網路深度學習神經網路
- 神經網路與深度學習 課程複習總結神經網路深度學習
- 深度學習筆記8:利用Tensorflow搭建神經網路深度學習筆記神經網路
- 深度學習與圖神經網路學習分享:訊息傳遞模式深度學習神經網路模式
- 吳恩達《神經網路與深度學習》課程筆記(2)– 神經網路基礎之邏輯迴歸吳恩達神經網路深度學習筆記邏輯迴歸
- 吳恩達《神經網路與深度學習》課程筆記(4)– 淺層神經網路吳恩達神經網路深度學習筆記
- 吳恩達《神經網路與深度學習》課程筆記(5)– 深層神經網路吳恩達神經網路深度學習筆記
- 深度學習四從迴圈神經網路入手學習LSTM及GRU深度學習神經網路
- 再聊神經網路與深度學習神經網路深度學習
- AI之(神經網路+深度學習)AI神經網路深度學習
- 【深度學習】神經網路入門深度學習神經網路
- 深度學習與圖神經網路深度學習神經網路
- 【深度學習篇】--神經網路中的卷積神經網路深度學習神經網路卷積
- 吳恩達《神經網路與深度學習》課程筆記(1)– 深度學習概述吳恩達神經網路深度學習筆記
- 【神經網路篇】--RNN遞迴神經網路初始與詳解神經網路RNN遞迴
- 【深度學習】1.4深層神經網路深度學習神經網路
- 深度學習三:卷積神經網路深度學習卷積神經網路
- 深度學習教程 | 深層神經網路深度學習神經網路
- 動手學深度學習第十四課:實現、訓練和應用迴圈神經網路深度學習神經網路
- 遞迴神經網路教程請簽收!遞迴神經網路
- 深度學習與圖神經網路學習分享:CNN 經典網路之-ResNet深度學習神經網路CNN
- 文字生成神經網路架構發展神經網路架構
- 深度學習——LeNet卷積神經網路初探深度學習卷積神經網路
- 深度學習之上,圖神經網路(GNN )崛起深度學習神經網路GNN
- 深度學習筆記------卷積神經網路深度學習筆記卷積神經網路
- 深度學習之step by step搭建神經網路深度學習神經網路
- 深度學習卷積神經網路筆記深度學習卷積神經網路筆記
- 深度學習經典卷積神經網路之AlexNet深度學習卷積神經網路
- 如何優化深度神經網路?優化神經網路
- 深度學習與CV教程(11) | 迴圈神經網路及視覺應用深度學習神經網路視覺
- 初探神經網路與深度學習 —— 感知器神經網路深度學習
- 【機器學習基礎】神經網路/深度學習基礎機器學習神經網路深度學習
- 吳恩達《神經網路與深度學習》課程筆記(3)– 神經網路基礎之Python與向量化吳恩達神經網路深度學習筆記Python
- 如何搭建“網路課堂”
- 神經網路學習之利用LabelImg對影像標註神經網路
- 深度學習、神經網路最好的入門級教程深度學習神經網路