def __init__(self, numpy_rng=None, theano_rng=None, conv_layer_configs=[], non_maximum_erasing=False, use_fast=False): self.conv_layers = [] if not theano_rng: theano_rng = RandomStreams(numpy_rng.randint(2**30)) # allocate symbolic variables for the data self.x = T.tensor4('x') self.conv_layer_num = len(conv_layer_configs) for i in xrange(self.conv_layer_num): if i == 0: input = self.x else: input = self.conv_layers[-1].output config = conv_layer_configs[i] conv_layer = ConvLayerForward(numpy_rng=numpy_rng, input=input, filter_shape=config['filter_shape'], poolsize=config['poolsize'], activation=config['activation'], flatten=config['flatten'], use_fast=use_fast) self.conv_layers.append(conv_layer)
def __init__(self, numpy_rng=None, theano_rng=None, cfg=[], non_maximum_erasing=False, use_fast=False): self.conv_layers = [] self.n_outs = cfg.n_outs self.layers = [] self.extra_layers = [] self.conv_layer_num = len(cfg.conv_layer_configs) self.dnn_layer_num = len(cfg.hidden_layers_sizes) self.extra_layers_sizes = cfg.extra_layers_sizes self.x = T.tensor4('x') self.extra_x = T.matrix('extra_x') for i in xrange(self.conv_layer_num): if i == 0: input = self.x else: input = self.conv_layers[-1].output config = cfg.conv_layer_configs[i] print config['filter_shape'] conv_layer = ConvLayerForward(numpy_rng=numpy_rng, input=input, filter_shape=config['filter_shape'], poolsize=config['poolsize'], activation=config['activation'], flatten=config['flatten'], use_fast=use_fast) self.layers.append(conv_layer) self.conv_layers.append(conv_layer) self.conv_output_dim = config['output_shape'][1] * config[ 'output_shape'][2] * config['output_shape'][3] cfg.n_ins = config['output_shape'][1] * config['output_shape'][ 2] * config['output_shape'][3] print self.conv_output_dim print cfg.n_ins print 'Extra input dimension: ' + str(cfg.extra_dim) for i in xrange(len(self.extra_layers_sizes)): if i == 0: input_size = cfg.extra_dim layer_input = self.extra_x else: input_size = self.extra_layers_sizes[i - 1] layer_input = self.extra_layers[-1].output W = None b = None attend_layer = HiddenLayer(rng=numpy_rng, input=layer_input, n_in=input_size, n_out=self.extra_layers_sizes[i], W=W, b=b) self.extra_layers.append(attend_layer) self.extra_output = self.extra_layers[-1].output self.extra_output = T.nnet.softmax(self.extra_layers[-1].output) print 'layer num: ' + str(len(self.layers) - 1) for i in xrange(self.dnn_layer_num): if i == 0: # 1. Join two features (magnitude + phase) input_size = self.conv_output_dim + self.extra_layers_sizes[-1] layer_input = T.join(1, self.layers[-1].output, self.extra_output) # 2. Weighted Sum (magnitude * phase) #input_size = self.conv_output_dim #layer_input = self.layers[-1].output * self.extra_output else: input_size = cfg.hidden_layers_sizes[i - 1] layer_input = self.layers[-1].output W = None b = None hidden_layer = HiddenLayer(rng=numpy_rng, input=layer_input, n_in=input_size, n_out=cfg.hidden_layers_sizes[i], W=W, b=b) self.layers.append(hidden_layer) print 'layer num: ' + str(len(self.layers) - 1) logLayer = OutputLayer(input=self.layers[-1].output, n_in=cfg.hidden_layers_sizes[-1], n_out=self.n_outs) self.layers.append(logLayer) print 'layer num: ' + str(len(self.layers) - 1)
def __init__(self, numpy_rng=None, theano_rng=None, cfg=None, non_maximum_erasing=False, use_fast=False): self.n_outs = cfg.n_outs self.layers = [] self.extra_layers = [] self.conv_layer_num = len(cfg.conv_layer_configs) self.dnn_layer_num = len(cfg.hidden_layers_sizes) self.extra_layers_sizes = cfg.extra_layers_sizes self.x = T.tensor4('x') self.extra_x = T.matrix('extra_x') for i in xrange(self.conv_layer_num): if i == 0: input = self.x else: input = self.layers[-1].output config = cfg.conv_layer_configs[i] conv_layer = ConvLayerForward(numpy_rng=numpy_rng, input=input, filter_shape=config['filter_shape'], poolsize=config['poolsize'], activation=config['activation'], flatten=config['flatten'], use_fast=use_fast) self.layers.append(conv_layer) self.conv_output_dim = config['output_shape'][1] * config[ 'output_shape'][2] * config['output_shape'][3] cfg.n_ins = config['output_shape'][1] * config['output_shape'][ 2] * config['output_shape'][3] for i in xrange(len(self.extra_layers_sizes)): if i == 0: input_size = 6400 * 5 input_size = cfg.extra_dim layer_input = self.extra_x else: input_size = self.extra_layers_sizes[i - 1] layer_input = self.extra_layers[-1].output W = None b = None attend_layer = HiddenLayer(rng=numpy_rng, input=layer_input, n_in=input_size, n_out=self.extra_layers_sizes[i], W=W, b=b) self.extra_layers.append(attend_layer) self.extra_layers[-1].att_e_tl = self.extra_layers[-1].output self.extra_layers[-1].att_a_tl = T.nnet.softmax( self.extra_layers[-1].att_e_tl) #self.extra_layers[-1].att_a_tl = T.exp(self.extra_layers[-1].att_e_tl)/(T.exp(self.extra_layers[-1].att_e_tl)).sum(0,keepdims=True) for i in xrange(self.dnn_layer_num): if i == 0: #input_size = self.conv_output_dim #layer_input = (self.extra_layers[-1].att_a_tl*self.layers[-1].output) input_size = self.conv_output_dim + self.extra_layers_sizes[-1] layer_input = T.join(1, self.extra_layers[-1].att_a_tl, self.layers[-1].output) else: input_size = cfg.hidden_layers_sizes[i - 1] layer_input = self.layers[-1].output W = None b = None hidden_layer = HiddenLayer(rng=numpy_rng, input=layer_input, n_in=input_size, n_out=cfg.hidden_layers_sizes[i], W=W, b=b) self.layers.append(hidden_layer) logLayer = OutputLayer(input=self.layers[-1].output, n_in=cfg.hidden_layers_sizes[-1], n_out=self.n_outs) self.layers.append(logLayer)