AlexeyAB DarkNet YOLOv3框架解析与应用实践(五)
AlexeyAB
DarkNet YOLOv3框架解析與應用實踐(五)
RNNs in Darknet
遞歸神經網絡是表示隨時間變化的數據的強大模型。為了更好地介紹RNNs,我強烈推薦Andrej Karpathy去年的博客文章,這是實現RNNs的一個很好的資源!
所有這些模型都使用相同的網絡架構,一個包含3個遞歸模塊的普通RNN。
每個模塊由3個完全連接的層組成。輸入層將信息從輸入傳播到當前狀態。遞歸層通過時間將信息從上一個狀態傳播到當前狀態。由于我們希望輸入層和遞歸層都影響當前狀態,所以我們將它們的輸出相加以得到當前狀態。最后,輸出層將當前狀態映射到RNN模塊的輸出。 網絡的輸入是一個1-hot編碼的ASCII字符。我們訓練網絡預測字符流中的下一個字符。輸出被限制為使用softmax層的概率分布。
由于每個遞歸層都包含有關當前字符和過去字符的信息,因此它可以使用此上下文來預測單詞或短語中的未來字符。隨著時間的推移,訓練的內容如下:
盡管一次只能預測一個字符,但這些網絡可以非常強大。在測試時,我們可以評估給定句子的可能性,也可以讓網絡自己生成文本!
要生成文本,首先我們通過輸入某些字符(如換行符“\n”)或一組字符(如句子)來建立網絡。然后,我們將網絡輸出的最后一個字符作為輸入反饋到網絡中。由于網絡的輸出是下一個字符的概率分布,我們可以從給定的分布中提取最可能的字符或樣本,但采樣往往會產生更有趣的結果。
用Darknet生成文本
首先你應該安裝Darknet。因為您不需要CUDA或OpenCV,所以這就像克隆GitHub存儲庫一樣簡單:
git clone https://github.com/pjreddie/darknet
cd darknet
make
選擇要使用的權重文件后,可以使用以下命令生成文本:
./darknet rnn generate cfg/rnn.cfg
也可以將各種標志傳遞給此命令:
-len:更改生成文本的長度,默認為1000
-seed:用給定的字符串為RNN設定種子,默認為“\n”
-srand:為可重復運行的隨機數生成器設置種子
-temp:設置采樣溫度,默認為0.7
要生成此文本,必須下載此權重文件:grrm.weights(36 MB)。然后運行以下命令:
./darknet rnn generate cfg/rnn.cfg
grrm.weights -srand 0 -seed JON
您可以更改srand或seed以生成不同的文本,所以請使用wild!我真的希望我不會因此被起訴。。。
OS X上的隨機數生成器與Linux上的不同,因此如果運行相同的命令,則會得到不同的輸出。
我不打算發布這個模型,但你可以下載自己的松弛日志,并在上面訓練一個模型!怎么,你問?繼續讀。。。。
訓練自己的模型
你也可以在新的文本數據上訓練自己的模型!訓練配置文件是cfg/rnn.train.cfg。訓練所需的只是一個文本文件,其中包含所有ASCII格式的數據。然后運行以下命令:
./darknet rnn train cfg/rnn.train.cfg -file
data.txt
模型會將定期備份保存到函數train_char_rnn中src/rnn.c中指定的目錄,您可能希望將此目錄更改為適合您的計算機的位置。要從備份重新開始訓練,您可以運行:
./darknet rnn train cfg/rnn.train.cfg
backup/rnn.train.backup -file data.txt
如果你想在大量數據上訓練大型模型,你可能需要在一個快速的GPU上運行它。你可以在CPU上訓練它,但可能需要一段時間,你已經被警告了!
總結
以上是生活随笔為你收集整理的AlexeyAB DarkNet YOLOv3框架解析与应用实践(五)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AlexeyAB DarkNet YOL
- 下一篇: AlexeyAB DarkNet YOL