diff options
author | Nicholas Leonard <nick@nikopia.org> | 2014-04-10 06:40:13 +0400 |
---|---|---|
committer | Nicholas Leonard <nick@nikopia.org> | 2014-04-10 06:40:13 +0400 |
commit | e5fbc5b3ee23207978b16f017153b4a67b98fcf1 (patch) | |
tree | 7cad48ccc05696880e4648ba5dcc84c761bd0654 /LookupTable.lua | |
parent | 6783768eb6e06ebbf0c1bd2d6b5f4bc9f709b32f (diff) |
unit tests complete
Diffstat (limited to 'LookupTable.lua')
-rw-r--r-- | LookupTable.lua | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/LookupTable.lua b/LookupTable.lua index 7db20f8..989bcdf 100644 --- a/LookupTable.lua +++ b/LookupTable.lua @@ -72,7 +72,9 @@ function LookupTable:updateOutput(input) for i=1,nExample do local output = self.output:select(1, i) + local input = input:select(1, i) for j=1,nIndex do + --print('test', i, j, input[j], output:size(), self.weight:size()) output:select(1, j):copy(self.weight:select(1, input[j])) end end @@ -105,7 +107,7 @@ function LookupTable:accGradParameters(input, gradOutput, scale) local gradOutput = gradOutput:select(1, i) for j=1,input:size(1) do local k = input[j] - self.input[k] = (self.inputs[k] or 0) + 1 + self.inputs[k] = (self.inputs[k] or 0) + 1 self.gradWeight:select(1, k):add(scale, gradOutput:select(1, j)) end end @@ -115,15 +117,24 @@ end function LookupTable:accUpdateGradParameters(input, gradOutput, lr) if input:dim() == 1 then for i=1,input:size(1) do - self.weight:select(1, input[i]):add(-lr, gradOutput:select(1, i)) + local k = input[j] + local scale = 1 + if self.fairScale then + scale = self:getFairScale(self.inputs[k]) + end + self.weight:select(1, input[i]):add(-lr*scale, gradOutput:select(1, i)) end elseif input:dim() == 2 then for i=1,input:size(1) do local input = input:select(1, i) local gradOutput = gradOutput:select(1, i) - for j=1,input:size(2) do - scale = self:getFairScale(nBackward) - self.weight:select(1, input[j]):add(-lr*scale, gradOutput:select(1, j)) + for j=1,input:size(1) do + local k = input[j] + local scale = 1 + if self.fairScale then + scale = self:getFairScale(self.inputs[k]) + end + self.weight:select(1, k):add(-lr*scale, gradOutput:select(1, j)) end end end |