simonwsw / deep-soli

Gesture Recognition Using Neural Networks with Google's Project Soli Sensor
MIT License
140 stars 52 forks source link

Fix: Incompatible rnn version #5

Open graulef opened 7 years ago

graulef commented 7 years ago

After the first batch was evaluated, I kept getting this error:

imi@imi-All-Series:~/graulef/deep-soli$ th net/main.lua --file ../datapre --list config/file_half.json --load ../uni_image_np_50.t7 --inputsize 32 --inputch 4 --label 11 --datasize 32 --datach 4 --batch 16 --maxseq 40 --cuda --cudnn
[eval] data with 1364 seq
[net] loading model ../uni_image_np_50.t7
nn.Sequencer @ nn.Recursor @ nn.MaskZero @ nn.Sequential {
  [input -> (1) -> (2) -> (3) -> (4) -> (5) -> (6) -> (7) -> (8) -> (9) -> (10) -> (11) -> (12) -> (13) -> (14) -> (15) -> (16) -> (17) -> (18) -> (19) -> (20) -> (21) -> output]
  (1): cudnn.SpatialConvolution(4 -> 32, 3x3, 2,2)
  (2): nn.SpatialBatchNormalization (4D) (32)
  (3): cudnn.ReLU
  (4): cudnn.SpatialConvolution(32 -> 64, 3x3, 2,2)
  (5): nn.SpatialBatchNormalization (4D) (64)
  (6): cudnn.ReLU
  (7): nn.SpatialDropout(0.400000)
  (8): cudnn.SpatialConvolution(64 -> 128, 3x3, 2,2)
  (9): nn.SpatialBatchNormalization (4D) (128)
  (10): cudnn.ReLU
  (11): nn.SpatialDropout(0.400000)
  (12): nn.Reshape(1152)
  (13): nn.Linear(1152 -> 512)
  (14): nn.BatchNormalization (2D) (512)
  (15): cudnn.ReLU
  (16): nn.Dropout(0.5, busy)
  (17): nn.Linear(512 -> 512)
  (18): nn.LSTM(512 -> 512)
  (19): nn.Dropout(0.5, busy)
  (20): nn.Linear(512 -> 13)
  (21): cudnn.LogSoftMax
}
/home/imi/graulef/datapre/0_12_20/label.json
/home/imi/graulef/datapre/0_10_18/label.json
/home/imi/graulef/datapre/0_6_8/label.json
/home/imi/graulef/datapre/0_3_0/label.json
/home/imi/graulef/datapre/0_12_22/label.json
/home/imi/graulef/datapre/0_13_10/label.json
/home/imi/graulef/datapre/0_12_3/label.json
/home/imi/graulef/datapre/0_5_14/label.json
/home/imi/graulef/datapre/0_10_15/label.json
/home/imi/graulef/datapre/0_2_5/label.json
/home/imi/graulef/datapre/0_3_5/label.json
/home/imi/graulef/datapre/0_3_18/label.json
/home/imi/graulef/datapre/0_12_21/label.json
/home/imi/graulef/datapre/0_5_21/label.json
/home/imi/graulef/datapre/0_10_20/label.json
/home/imi/graulef/datapre/0_13_6/label.json
Evaluation passed
2
just used :norm without error
/home/imi/torch/install/bin/luajit: /home/imi/torch/install/share/lua/5.1/rnn/MaskZero.lua:55: invalid arguments: CudaTensor CudaTensor number
expected arguments: *CudaTensor* CudaByteTensor float
stack traceback:
        [C]: in function 'maskedFill'
        /home/imi/torch/install/share/lua/5.1/rnn/MaskZero.lua:55: in function 'recursiveMask'
        /home/imi/torch/install/share/lua/5.1/rnn/MaskZero.lua:99: in function 'updateOutput'
        /home/imi/torch/install/share/lua/5.1/rnn/Recursor.lua:27: in function 'updateOutput'
        /home/imi/torch/install/share/lua/5.1/rnn/Sequencer.lua:94: in function 'forward'
        ./net/rnntrain.lua:33: in function 'batchEval'
        ./net/train.lua:25: in function 'epochEval'
        ./net/train.lua:47: in function 'train'
        net/main.lua:45: in main chunk
        [C]: in function 'dofile'
        .../imi/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:150: in main chunk
        [C]: at 0x004065d0

It can be fixed by warping the part of code in the rnn library. Line number might differ, just look for the line of code where the mask is applied:output:maskedFill(zeroMask, 0). The file you wanna fix is /home/usr/torch/install/share/lua/5.1/rnn/MaskZero.lua. Warping works like this:

      if(zeroMask:type() == 'torch.CudaTensor') then
        zeroMask = zeroMask:cudaByte()
      end
      output:maskedFill(zeroMask, 0)
      if(zeroMask:type() == 'torch.CudaByteTensor') then
        zeroMask = zeroMask:cuda()
      end

This solved the issue for me, hope this helps if anyone has the same problem!