From 40da326da485cae4e0a72a96db1fb0a3c90757e4 Mon Sep 17 00:00:00 2001 From: Determinant Date: Tue, 3 May 2016 21:52:32 +0800 Subject: add `no_update` attribute to `nerv.MatrixParam`; add corresponding settings to `nerv.AffineLayer` and `nerv.LSTMGateLayer` --- nerv/layer/affine.lua | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'nerv/layer/affine.lua') diff --git a/nerv/layer/affine.lua b/nerv/layer/affine.lua index b4358ca..3bf5a11 100644 --- a/nerv/layer/affine.lua +++ b/nerv/layer/affine.lua @@ -41,6 +41,9 @@ function MatrixParam:copy(copier) end function MatrixParam:_update(alpha, beta) + if self.no_update then + return + end local gconf = self.gconf -- momentum gain local mmt_gain = 1.0 / (1.0 - gconf.momentum) @@ -97,19 +100,28 @@ function AffineLayer:__init(id, global_conf, layer_conf) end function AffineLayer:bind_params() + local lconf = self.lconf + lconf.no_update_ltp1 = lconf.no_update_ltp1 or lconf.no_update_ltp for i = 1, #self.dim_in do local pid = "ltp" .. i local pid_list = i == 1 and {pid, "ltp"} or pid - self["ltp" .. i] = self:find_param(pid_list, self.lconf, self.gconf, + self["ltp" .. i] = self:find_param(pid_list, lconf, self.gconf, nerv.LinearTransParam, {self.dim_in[i], self.dim_out[1]}) + local no_update = lconf["no_update_ltp"..i] + if (no_update ~= nil) and no_update or lconf.no_update_all then + self["ltp" .. i].no_update = true + end end self.ltp = self.ltp1 -- alias of ltp1 - self.bp = self:find_param("bp", self.lconf, self.gconf, + self.bp = self:find_param("bp", lconf, self.gconf, nerv.BiasParam, {1, self.dim_out[1]}, nerv.Param.gen_zero) - + local no_update = lconf["no_update_bp"] + if (no_update ~= nil) and no_update or lconf.no_update_all then + self.bp.no_update = true + end end function AffineLayer:init(batch_size) -- cgit v1.2.3