-
Notifications
You must be signed in to change notification settings - Fork 1
/
model.lua
103 lines (76 loc) · 2.38 KB
/
model.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
-- <Nicolo Savioli> --
require 'torch'
require 'nn'
require 'cutorch'
require 'cunn'
require 'cudnn'
require 'optim'
require 'fbcunn'
require 'fbnn'
require 'xlua'
-----------------------------------------------------------
-- a typical modern convolution network (conv+relu+pool) --
-----------------------------------------------------------
--------------------
-- CNN input size --
--------------------
sample_size = {3, 32, 32}
-----------------------
-- feature maps size --
-----------------------
feature_size = {3, 32, 64}
filter_size = {5, 5}
pool_size = {2, 2}
pool_step = {2, 2}
classifer_hidden_units = {512}
----------------------------------------------------------------------
-- WARNING: change this if you change feature/filter/pool size/step --
----------------------------------------------------------------------
features_out = feature_size[3] * 5 * 5
-------------
-- Dropout --
-------------
dropout_p = 0.5
if opt.dropout then
print("Using dropout ...")
end
---------------------------
-- Configuring optimizer --
---------------------------
optim_state = {
learningRate = opt.learning_rate,
learningRateDecay = 0,
momentum = opt.momentum,
dampening = 0.0,
weightDecay = opt.weight_decay,
}
print 'Defining modern convolution network (conv+relu+pool) [2 Stages]'
model = nn.Sequential()
-------------
-- Stage 1 --
-------------
model:add(cudnn.SpatialConvolution(feature_size[1], feature_size[2], filter_size[1], filter_size[2]), 1, 1)
model:add(cudnn.ReLU(true))
model:add(cudnn.SpatialMaxPooling(pool_size[1],pool_size[2],pool_step[1],pool_step[2]))
-------------
-- Stage 2 --
-------------
model:add(cudnn.SpatialConvolution(feature_size[2], feature_size[3], filter_size[1], filter_size[2]), 1, 1)
model:add(cudnn.ReLU(true))
model:add(cudnn.SpatialMaxPooling(pool_size[1],pool_size[2],pool_step[1],pool_step[2]))
------------------------------------------------
-- Get feature vectors i.e. flat feature maps --
------------------------------------------------
model:add(nn.Reshape(features_out, true))
if opt.dropout then
model:add(nn.Dropout(dropout_p))
end
----------------------------
-- Fully connected layers --
----------------------------
model:add(nn.Linear(features_out, classifer_hidden_units[1]))
model:add(nn.ReLU())
if opt.dropout then
model:add(nn.Dropout(dropout_p))
end
model:add(nn.Linear(classifer_hidden_units[1], num_classes))