-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmyAlexModel.lua
59 lines (49 loc) · 2.15 KB
/
myAlexModel.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
require 'cudnn'
require 'cunn'
local SpatialConvolution = cudnn.SpatialConvolution--lib[1]
local SpatialMaxPooling = cudnn.SpatialMaxPooling--lib[2]
-- from https://code.google.com/p/cuda-convnet2/source/browse/layers/layers-imagenet-1gpu.cfg
-- this is AlexNet that was presented in the One Weird Trick paper. http://arxiv.org/abs/1404.5997
local features = nn.Sequential()
features:add(SpatialConvolution(1,192,11,11,4,4,0,0)) -- 224 -> 55
features:add(SpatialMaxPooling(3,3,2,2)) -- 55 -> 27
features:add(cudnn.ReLU(true))
features:add(nn.SpatialBatchNormalization(192,nil,nil,false))
features:add(SpatialConvolution(192,512,5,5,1,1,2,2)) -- 27 -> 27
features:add(SpatialMaxPooling(3,3,2,2)) -- 27 -> 13
features:add(cudnn.ReLU(true))
features:add(nn.SpatialBatchNormalization(512,nil,nil,false))
features:add(SpatialConvolution(512,768,3,3,1,1,1,1)) -- 13 -> 13
features:add(cudnn.ReLU(true))
features:add(nn.SpatialBatchNormalization(768,nil,nil,false))
features:add(SpatialConvolution(768,768,3,3,1,1,1,1)) -- 13 -> 13
features:add(cudnn.ReLU(true))
features:add(nn.SpatialBatchNormalization(768,nil,nil,false))
features:add(SpatialConvolution(768,512,3,3,1,1,1,1)) -- 13 -> 13
features:add(SpatialMaxPooling(3,3,2,2)) -- 13 -> 6
features:add(cudnn.ReLU(true))
features:add(nn.SpatialBatchNormalization(512,nil,nil,false))
local classifier = nn.Sequential()
classifier:add(nn.View(512*5*5))
classifier:add(nn.Dropout(0.5))
classifier:add(nn.Linear(512*5*5, 4096))
classifier:add(nn.Threshold(0, 1e-6))
classifier:add(nn.BatchNormalization(4096,nil,nil,false))
classifier:add(nn.Dropout(0.5))
classifier:add(nn.Linear(4096, 4096))
classifier:add(nn.Threshold(0, 1e-6))
classifier:add(nn.BatchNormalization(4096,nil,nil,false))
classifier:add(nn.Linear(4096, 352))
classifier:add(nn.LogSoftMax())
local model = nn.Sequential()
function fillBias(m)
for i=1, #m.modules do
if m:get(i).bias then
m:get(i).bias:fill(0.1)
end
end
end
--fillBias(features)
--fillBias(classifier)
model:add(features):add(classifier)
return model