diff options
author | Nerv-SJTU <nerv.sjtu@gmail.com> | 2015-08-05 07:38:47 +0800 |
---|---|---|
committer | Nerv-SJTU <nerv.sjtu@gmail.com> | 2015-08-05 07:38:47 +0800 |
commit | 88c49ed196b90d1f4f0e9562212d36509f218dc8 (patch) | |
tree | 19d226691de47b7574f028bd65b04e352a02c26f /nerv/examples/lmptb/lmptb/layer/lm_affine_recurrent.lua | |
parent | b385d55268b7b327534e227065907a5ea2d2b731 (diff) | |
parent | a1ad5bd69fe55fb193298f1e533018e8eb379c4a (diff) |
Merge pull request #1 from cloudygoose/rnn
port lmptb
Diffstat (limited to 'nerv/examples/lmptb/lmptb/layer/lm_affine_recurrent.lua')
-rw-r--r-- | nerv/examples/lmptb/lmptb/layer/lm_affine_recurrent.lua | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/nerv/examples/lmptb/lmptb/layer/lm_affine_recurrent.lua b/nerv/examples/lmptb/lmptb/layer/lm_affine_recurrent.lua new file mode 100644 index 0000000..f1eb4a1 --- /dev/null +++ b/nerv/examples/lmptb/lmptb/layer/lm_affine_recurrent.lua @@ -0,0 +1,25 @@ +local LMRecurrent = nerv.class('nerv.LMAffineRecurrentLayer', 'nerv.AffineRecurrentLayer') --breaks at sentence end, when </s> is met, input will be set to zero + +--id: string +--global_conf: table +--layer_conf: table +--Get Parameters +function LMRecurrent:__init(id, global_conf, layer_conf) + nerv.AffineRecurrentLayer.__init(self, id, global_conf, layer_conf) + self.break_id = layer_conf.break_id --int, breaks recurrent input when the input (word) is break_id + self.independent = layer_conf.independent --bool, whether break +end + +function LMRecurrent:propagate(input, output) + output[1]:mul(input[1], self.ltp_ih.trans, 1.0, 0.0, 'N', 'N') + if (self.independent == true) then + for i = 1, input[1]:nrow() do + if (input[1][i - 1][self.break_id - 1] > 0.1) then --here is sentence break + input[2][i - 1]:fill(0) + end + end + end + output[1]:mul(input[2], self.ltp_hh.trans, 1.0, 1.0, 'N', 'N') + output[1]:add_row(self.bp.trans, 1.0) +end + |