TensorFlow系列專題(八):七步帶你實現RNN迴圈神經網路小示例
編輯 | 安可
出品 | 磐創AI技術團隊
【前言】:在前面的內容裡,我們已經學習了迴圈神經網路的基本結構和運算過程,這一小節裡,我們將用TensorFlow實現簡單的RNN,並且用來解決時序資料的預測問題,看一看RNN究竟能達到什麼樣的效果,具體又是如何實現的。
在這個演示專案裡,我們使用隨機生成的方式生成一個資料集(由0和1組成的二進位制序列),然後人為的增加一些資料間的關係。最後我們把這個資料集放進RNN裡,讓RNN去學習其中的關係,實現二進位制序列的預測1。資料生成的方式如下:
迴圈生成規模為五十萬的資料集,每次產生的資料為0或1的機率均為0.5。如果連續生成了兩個1(或兩個0)的話,則下一個資料強制為0(或1)。
1. 我們首先匯入需要的Python模組:
2. 定義一個Data類,用來產生資料:
3. 在構造方法“__init__”中,我們初始化了資料集的大小“data_size”、一個batch的大小“batch_size”、一個epoch中的batch數目“num_batch”以及RNN的時間步“time_step”。接下來我們定義一個“generate_data”方法:
在第11行程式碼中,我們用了“np.random.choice”函式生成的由0和1組成的長串資料。接下來我們用了一個for迴圈,在“data_without_rel”儲存的資料的基礎上重新生成了一組資料,並儲存在“data_with_rel”陣列中。為了使生成的資料間具有一定的序列關係,我們使用了前面介紹的很簡單的資料生成方式:以“data_without_rel”中的資料為參照,如果出現了連續兩個1(或0)則生成一個0(或1),其它情況則以相等機率隨機生成0或1。
有了資料我們接下來要用RNN去學習這些資料,看看它能不能學習到我們產生這些資料時使用的策略,即資料間的聯絡。評判RNN是否學習到規律以及學習的效果如何的依據,是我們在第三章裡介紹過的交叉熵損失函式。根據我們生成資料的規則,如果RNN沒有學習到規則,那麼它預測正確的機率就是0.5,否則它預測正確的機率為:0.5*0.5+0.5*1=0.75(在“data_without_rel”中,連續出現的兩個數字的組合為:00、01、10和11。00和11出現的總機率佔0.5,在這種情況下,如果RNN學習到了規律,那麼一定能預測出下一個數字,00對應1,11對應0。而如果出現的是01或10的話,RNN預測正確的機率就只有0.5,所以綜合起來就是0.75)。
根據交叉熵損失函式,在沒有學習到規律的時候,其交叉熵損失為:
loss = - (0.5 * np.log(0.5) + 0.5 * np.log(0.5)) = 0.6931471805599453
在學習到規律的時候,其交叉熵損失為:
Loss = -0.5*(0.5 * np.log(0.5) + np.log(0.5))
=-0.25 * (1 * np.log(1) ) - 0.25 * (1 *np.log(1))
=0.34657359027997264
4. 我們定義“generate_epochs”方法處理生成的資料:
5. 接下來實現RNN部分:
6. 定義RNN模型:
這裡我們使用了“dynamic_rnn”,因此每次會同時處理所有batch的第一組資料,總共處理的次數為:batch_size / time_step。
7. 到這裡,我們已經實現了整個RNN模型,接下來初始化相關資料,看看RNN的學習效果如何:
定義資料集的大小為500000,每個batch的大小為2000,RNN的“時間步”設為5,隱藏層的神經元數目為6。將訓練過程中的loss視覺化,結果如下圖中的左側影像所示:
圖1 二進位制序列資料訓練的loss曲線
從左側loss曲線可以看到,loss最終穩定在了0.35左右,這與我們之前的計算結果一致,說明RNN學習到了序列資料中的規則。右側的loss曲線是在調整了序列關係的時間間隔後(此時的time_step過小,導致RNN無法學習到序列資料的規則)的結果,此時loss穩定在0.69左右,與之前的計算也吻合。
原文連結:https://mp.weixin.qq.com/s/ol91meefAd9j3G0EAVtN3w
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31555081/viewspace-2221141/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- TensorFlow系列專題(七):一文綜述RNN迴圈神經網路RNN神經網路
- 迴圈神經網路(RNN)神經網路RNN
- 迴圈神經網路 RNN神經網路RNN
- [譯] RNN 迴圈神經網路系列 2:文字分類RNN神經網路文字分類
- RNN 迴圈神經網路系列 5: 自定義單元RNN神經網路
- (一)線性迴圈神經網路(RNN)神經網路RNN
- (二)非線性迴圈神經網路(RNN)神經網路RNN
- 迴圈神經網路(Recurrent Neural Network,RNN)神經網路RNN
- 深度學習之RNN(迴圈神經網路)深度學習RNN神經網路
- [譯] RNN 迴圈神經網路系列 3:編碼、解碼器RNN神經網路
- TensorFlow構建迴圈神經網路神經網路
- 4.5 RNN迴圈神經網路(recurrent neural network)RNN神經網路
- Recurrent Neural Networks(RNN) 迴圈神經網路初探RNN神經網路
- 從網路架構方面簡析迴圈神經網路RNN架構神經網路RNN
- 迴圈神經網路(RNN,Recurrent Neural Networks)介紹神經網路RNN
- 迴圈神經網路LSTM RNN迴歸:sin曲線預測神經網路RNN
- YJango的迴圈神經網路——實現LSTMGo神經網路
- TensorFlow學習筆記(8):基於MNIST資料的迴圈神經網路RNN筆記神經網路RNN
- 迴圈神經網路神經網路
- RNN-迴圈神經網路和LSTM_01基礎RNN神經網路
- Tensorflow系列專題(四):神經網路篇之前饋神經網路綜述神經網路
- YJango的迴圈神經網路——scan實現LSTMGo神經網路
- 【神經網路篇】--RNN遞迴神經網路初始與詳解神經網路RNN遞迴
- 關於 RNN 迴圈神經網路的反向傳播求導RNN神經網路反向傳播求導
- 從前饋到反饋:解析迴圈神經網路(RNN)及其tricks神經網路RNN
- 迴圈神經網路介紹神經網路
- 迴圈神經網路入門神經網路
- 吳恩達《序列模型》課程筆記(1)– 迴圈神經網路(RNN)吳恩達模型筆記神經網路RNN
- 迴圈神經網路(RNN)模型與前向反向傳播演算法神經網路RNN模型反向傳播演算法
- 利用Tensorflow實現神經網路模型神經網路模型
- 第五週:迴圈神經網路神經網路
- 動畫圖解迴圈神經網路動畫圖解神經網路
- pytorch--迴圈神經網路PyTorch神經網路
- 前沿高階技術之遞迴神經網路(RNN)遞迴神經網路RNN
- 常見迴圈神經網路結構神經網路
- RNN神經網路模型綜述RNN神經網路模型
- TensorFlow上實現卷積神經網路CNN卷積神經網路CNN
- 利用Tensorflow實現卷積神經網路模型卷積神經網路模型