def gen_layers(self):
"""Construct the layers"""
# Init <TODO>
pad_in = 'valid'
self.layers = []
# input layer
l_input = (InputLayer,
{'shape': (None, self.X_in.shape[1],
self.X_in.shape[2],
self.X_in.shape[3])})
self.layers.append(l_input)
# Conv and pool layers
rows, cols = self.X_in.shape[2:]
for i in range(len(self.kernel_size)):
# conv
l_conv = (Conv2DLayer,
{'num_filters': self.kernel_num[i],
'filter_size': self.kernel_size[i],
'nonlinearity': lasagne.nonlinearities.rectify,
'W': lasagne.init.GlorotUniform(),
'pad': pad_in})
self.layers.append(l_conv)
rows = rows - self.kernel_size[i] + 1
cols = cols - self.kernel_size[i] + 1
# pool
if self.pool_flag[i]:
l_pool = (MaxPool2DLayer,
{'pool_size': self.pool_size})
self.layers.append(l_pool)
rows = rows // 2
cols = cols // 2
# dropout
if not self.dropflag:
self.droprate = 0
l_drop = (DropoutLayer, {'p': self.droprate})
# self.layers.append(l_drop)
# full connected layer
num_fc = rows * cols * self.kernel_num[-1]
l_fc = (DenseLayer,
{'num_units': num_fc,
'nonlinearity': lasagne.nonlinearities.rectify,
'W': lasagne.init.GlorotUniform(),
'b': lasagne.init.Constant(0.)}
)
self.layers.append(l_fc)
# dense
if not self.fc_nodes is None:
for i in range(len(self.fc_nodes)):
self.layers.append(l_drop)
l_dense = (DenseLayer, {'num_units': self.fc_nodes[i]})
self.layers.append(l_dense)
# output layer
self.layers.append(l_drop)
l_out = (DenseLayer,
{'name': 'output',
'num_units': self.numclass,
'nonlinearity': lasagne.nonlinearities.softmax})
self.layers.append(l_out)
评论列表
文章目录