require 'nn' local nfeats = 500 local nstates = {} local filtsize = 10 local poolsize = 10 -- a typical modern convolution network (conv+relu+pool) model = nn.Sequential() -- stage 1 : filter bank -> squashing -> L2 pooling -> normalization model:add(nn.SpatialConvolutionMM(nfeats, nstates[1], filtsize, filtsize)) model:add(nn.ReLU()) model:add(nn.SpatialMaxPooling(poolsize,poolsize,poolsize,poolsize)) -- stage 2 : filter bank -> squashing -> L2 pooling -> normalization model:add(nn.SpatialConvolutionMM(nstates[1], nstates[2], filtsize, filtsize)) model:add(nn.ReLU()) model:add(nn.SpatialMaxPooling(poolsize,poolsize,poolsize,poolsize)) -- stage 3 : standard 2-layer neural network model:add(nn.View(nstates[2]*filtsize*filtsize)) model:add(nn.Dropout(0.5)) model:add(nn.Linear(nstates[2]*filtsize*filtsize, nstates[3])) model:add(nn.ReLU()) model:add(nn.Linear(nstates[3], noutputs))