rnnlm原始碼分析 一

2021-06-29 11:26:52 字數 3373 閱讀 7065

系列前言

rnnlm - recurrent neural network  language modeling toolkit(點此閱讀)

recurrent neural network based language model(點此閱讀)

extensions of recurrent neural network language model(點此閱讀)

strategies for training large scale neural network  

language models(點此閱讀)

statistical language models based on neural  

networks(點此閱讀)

a guide to recurrent neural networks and backpropagation(點此閱讀)

a neural probabilistic language model(點此閱讀)

learning long-term dependencies with gradient descent is difficult(點此閱讀)

can artificial neural networks learn language models?(點此閱讀)

前言完畢了,第一篇本來是想直接把rnnlmlib.h直接放上來,然後介紹整個網路輪廓,大概看一下相關介面函式功能,但是那樣內容發現有點長了,看上去都容易打瞌睡。於是把rnnlmlib.h分成兩部分,第一篇文章介紹其中的成員變數,因為理解這些成語變數才能清楚的知道rnnlm toolkit命令引數的具體含義;第二篇介紹其中的成員函式,不涉及具體實現(那是後續文章的事兒),只是大概知道函式什麼功能即可,估計第二篇內容稍短。

我先把整個網路的圖放上來,然後可以對應著看,下面的圖是對應源**所抽象出來的,我會把實際**的模型圖放上來做參照對比。

下面的圖是**中的圖,可以很明顯的注意到實現和模型圖還是有點差別,實現的時候把w(t)和s(t-1)、y(t)和c(t)合併成乙個層了.

這裡的圖的輸出層是經過分解的,為了加速。我後面的文章會介紹到

和未分解的圖和

分解的計算。第一篇的目的就在於大概的了解真個網路的結構,巨集觀的看一看。下面是rnnlmlib.h檔案的內容,雖然直接把成員變數切出來讓類不完整,但沒辦法,成員函式在第二篇中介紹。

rnnlmlib.h內容如下:

/////

// recurrent neural network based statistical language modeling toolkit

// version 0.4a

// (c) 2010-2012 tomas mikolov ([email protected])

// (c) 2013 cantab research ltd ([email protected])

/////

//這裡的作用是防止rnnlmlib.h重複被include

//如果程式第一次包含rnnlmlib.h,將會把#ifndef到檔案最後一行的#endif之間的內容都執行

//如果程式不是第一次包含rnnlmlib.h,則該檔案的內容會被跳過

#ifndef _rnnlmlib_h_        

#define _rnnlmlib_h_        

//最大字串的長度                      

#define max_string 100

//防止weighttype被重複定義

#ifndef weighttype      

//權重型別,這裡可以手動更改為float   

#define weighttype double

#endif

//real用於rnn中神經元的啟用值,誤差值型別

typedef

weighttype real;    

// nn weights

//direct_t表示最大熵模型中輸入層到輸出層權值型別

typedef

weighttype direct_t;    

// me weights

//rnn中神經元結構,兩部分

//ac表示啟用值,er表示誤差值,er用在網路學習時

struct

neuron ;  

//突觸,這裡是表示網路層與層之間引數權值的結構

//其實就是浮點型別,只是包上了一層,這樣更形象                

struct

synapse ;  

//這是乙個word的結構定義

struct

vocab_word ;  

//primes這個數組裝都是質數,質數的用處是來做雜湊函式的

//對雜湊函式了解不多,個人理解可以使雜湊函式更少的衝突吧

const

unsigned 

int

primes=;  

//primes陣列長度,這個用法可以積累一下,以後自己的程式也可以使用

const

unsigned 

int

primes_size=

sizeof

(primes)/

sizeof

(primes[0]);  

//最大階數,這個是用來限制最大熵模型的n元模型特徵的,n不能無窮大,這裡最大是20

const

int

max_ngram_order=20;  

//檔案儲存型別,text表示ascii儲存,對儲存網路權值時,有點浪費空間

//binary表示二進位制方式儲存,對網路權值進行儲存時,能更省空間,但是不便於閱讀

enum

filetypeenum ;       

//compressed not yet implemented

//這個類就是rnn的結構定義

class

crnnlm;  

#endif

rnnlm原始碼分析 七

系列前言 rnnlm recurrent neural network language modeling toolkit 點此閱讀 recurrent neural network based language model 點此閱讀 extensions of recurrent neural n...

Mangos原始碼分析 一)

mangos 原始碼分析 realmd 登陸伺服器 realmd 主程式 launch the realm server int main int argc,char argv h.add authlistensocket 進行一些引數設定 while stopevent 伺服器主迴圈 return...

testlink原始碼分析 一

testlink是乙個很好的用例管理開源元件,因為我之前也作過乙個用例管理的系統,但是遠沒有testlink靈活,本著學習的態度,自己分析一下testlink的源 一點理解,和大家分享,希望能拋磚引玉。下面來看一下testlink的資料庫設計。1 許可權管理 testlink提供了豐富的許可權管理,...