コード例 #1
0
def ResidualModule(input_layer,
                   num_filters=64,
                   nonlinearity=rectify,
                   normalize=False,
                   stride=(1, 1),
                   conv_dropout=0.0):
    input_conv = Conv2DLayer(incoming=input_layer,
                             num_filters=num_filters,
                             filter_size=(3, 1),
                             stride=stride,
                             pad='same',
                             W=lasagne.init.GlorotUniform(),
                             nonlinearity=None,
                             b=None,
                             name='Residual module layer 1')
    l_prev = BatchNormalizeLayer(input_conv,
                                 normalize=normalize,
                                 nonlinearity=nonlinearity)
    l_prev = TiedDropoutLayer(l_prev, p=conv_dropout, name='Tied Dropout')

    l_prev = Conv2DLayer(incoming=l_prev,
                         num_filters=num_filters,
                         filter_size=(3, 1),
                         stride=(1, 1),
                         pad='same',
                         W=lasagne.init.GlorotUniform(),
                         nonlinearity=None,
                         b=None,
                         name='Residual module layer 2')
    if normalize:
        # Batch normalization is done "immediately after" convolutions
        l_prev = BatchNormLayer(l_prev, name='Batch norm')

    # Using 1x1 convolutions for shortcut projections. NiNLayer could be used as well
    # but doesn't' support strides
    l_skip = Conv2DLayer(input_layer,
                         num_filters=num_filters,
                         filter_size=(1, 1),
                         stride=stride,
                         nonlinearity=None,
                         b=None,
                         name='Shortcut')
    l_prev = ElemwiseSumLayer((l_prev, l_skip), name='Elementwise sum')

    # Add nonlinearity after summation
    l_prev = NonlinearityLayer(l_prev,
                               nonlinearity=nonlinearity,
                               name='Non-linearity')
    if not normalize:
        l_prev = BiasLayer(l_prev, name='Bias')

    l_prev = TiedDropoutLayer(l_prev, p=conv_dropout, name='Tied Dropout')
    return l_prev
コード例 #2
0
def RecurrentConvLayer(input_layer,
                       t=3,
                       num_filters=64,
                       filter_size=7,
                       nonlinearity=rectify,
                       normalize=False,
                       rcl_dropout=0.0):
    input_conv = Conv2DLayer(incoming=input_layer,
                             num_filters=num_filters,
                             filter_size=(1, 1),
                             stride=(1, 1),
                             pad='same',
                             W=lasagne.init.GlorotNormal(),
                             nonlinearity=None,
                             b=None,
                             name='RCL Conv2D input')
    l_prev = BatchNormalizeLayer(input_conv,
                                 normalize=normalize,
                                 nonlinearity=nonlinearity)
    l_prev = TiedDropoutLayer(l_prev,
                              p=rcl_dropout,
                              name='Recurrent conv dropout')

    for _ in range(t):
        l_prev = Conv2DLayer(incoming=l_prev,
                             num_filters=num_filters,
                             filter_size=(filter_size, 1),
                             stride=(1, 1),
                             pad='same',
                             W=lasagne.init.GlorotNormal(),
                             nonlinearity=None,
                             b=None,
                             name='Conv2D t=%d' % _)
        l_prev = ElemwiseSumLayer((input_conv, l_prev), coeffs=1, name='Sum')
        l_prev = BatchNormalizeLayer(l_prev,
                                     normalize=normalize,
                                     nonlinearity=nonlinearity)
        l_prev = TiedDropoutLayer(l_prev,
                                  p=rcl_dropout,
                                  name='Recurrent conv dropout')
    return l_prev
コード例 #3
0
    def __init__(self,
                 n_in,
                 n_filters,
                 filter_sizes,
                 n_out,
                 pool_sizes=None,
                 n_hidden=(512),
                 ccf=False,
                 trans_func=rectify,
                 out_func=softmax,
                 dense_dropout=0.0,
                 stats=2,
                 input_noise=0.0,
                 batch_norm=False,
                 conv_dropout=0.0):
        super(CNN, self).__init__(n_in, n_hidden, n_out, trans_func)
        self.outf = out_func
        self.log = ""

        # Define model using lasagne framework
        dropout = True if not dense_dropout == 0.0 else False

        # Overwrite input layer
        sequence_length, n_features = n_in
        self.l_in = InputLayer(shape=(None, sequence_length, n_features))
        l_prev = self.l_in

        # Separate into raw values and statistics
        sequence_length -= stats
        stats_layer = SliceLayer(l_prev,
                                 indices=slice(sequence_length, None),
                                 axis=1)
        stats_layer = ReshapeLayer(stats_layer, (-1, stats * n_features))
        print('Stats layer shape', stats_layer.output_shape)
        l_prev = SliceLayer(l_prev, indices=slice(0, sequence_length), axis=1)
        print('Conv input layer shape', l_prev.output_shape)

        # Apply input noise
        l_prev = GaussianNoiseLayer(l_prev, sigma=input_noise)

        if ccf:
            self.log += "\nAdding cross-channel feature layer"
            l_prev = ReshapeLayer(l_prev, (-1, 1, sequence_length, n_features))
            l_prev = Conv2DLayer(l_prev,
                                 num_filters=4 * n_features,
                                 filter_size=(1, n_features),
                                 nonlinearity=None)
            n_features *= 4
            if batch_norm:
                l_prev = batch_norm_layer(l_prev)
            l_prev = ReshapeLayer(l_prev, (-1, n_features, sequence_length))
            l_prev = DimshuffleLayer(l_prev, (0, 2, 1))

        # 2D Convolutional layers
        l_prev = ReshapeLayer(l_prev, (-1, 1, sequence_length, n_features))
        l_prev = DimshuffleLayer(l_prev, (0, 3, 2, 1))

        # Add the convolutional filters
        for n_filter, filter_size, pool_size in zip(n_filters, filter_sizes,
                                                    pool_sizes):
            self.log += "\nAdding 2D conv layer: %d x %d" % (n_filter,
                                                             filter_size)
            l_prev = Conv2DLayer(l_prev,
                                 num_filters=n_filter,
                                 filter_size=(filter_size, 1),
                                 nonlinearity=self.transf,
                                 pad=filter_size // 2)
            if batch_norm:
                l_prev = batch_norm_layer(l_prev)
            if pool_size > 1:
                self.log += "\nAdding max pooling layer: %d" % pool_size
                l_prev = Pool2DLayer(l_prev, pool_size=(pool_size, 1))
            self.log += "\nAdding dropout layer: %.2f" % conv_dropout
            l_prev = TiedDropoutLayer(l_prev, p=conv_dropout)
            print("Conv out shape", get_output_shape(l_prev))

        # Global pooling layer
        l_prev = GlobalPoolLayer(l_prev,
                                 pool_function=T.mean,
                                 name='Global Mean Pool')
        print("GlobalPoolLayer out shape", get_output_shape(l_prev))

        # Concatenate stats
        l_prev = ConcatLayer((l_prev, stats_layer), axis=1)

        for n_hid in n_hidden:
            self.log += "\nAdding dense layer with %d units" % n_hid
            print("Dense input shape", get_output_shape(l_prev))
            l_prev = DenseLayer(l_prev, n_hid, init.GlorotNormal(),
                                init.Normal(1e-3), self.transf)
            if batch_norm:
                l_prev = batch_norm_layer(l_prev)
            if dropout:
                self.log += "\nAdding dense dropout with probability: %.2f" % dense_dropout
                l_prev = DropoutLayer(l_prev, p=dense_dropout)

        if batch_norm:
            self.log += "\nUsing batch normalization"

        self.model = DenseLayer(l_prev, num_units=n_out, nonlinearity=out_func)
        self.model_params = get_all_params(self.model)

        self.sym_x = T.tensor3('x')
        self.sym_t = T.matrix('t')
コード例 #4
0
    def __init__(self, n_in, n_filters, filter_sizes, n_out, pool_sizes=None, n_hidden=(), ccf=False,
                 rcl=(), rcl_dropout=0.0, trans_func=rectify, out_func=softmax, dropout_probability=0.0,
                 batch_norm=False, stats=0):
        super(RCNN, self).__init__(n_in, n_hidden, n_out, trans_func)
        self.outf = out_func
        self.log = ""

        # Define model using lasagne framework
        dropout = True if not dropout_probability == 0.0 else False

        # Overwrite input layer
        sequence_length, n_features = n_in
        self.l_in = InputLayer(shape=(None, sequence_length+stats, n_features), name='Input')
        l_prev = self.l_in
        print("Input shape: ", get_output_shape(l_prev))

        # Separate into raw values and statistics
        if stats > 0:
            stats_layer = SliceLayer(l_prev, indices=slice(sequence_length, None), axis=1)
            stats_layer = ReshapeLayer(stats_layer, (-1, stats*n_features))
            l_prev = SliceLayer(l_prev, indices=slice(0, sequence_length), axis=1)

        # Input noise
        sigma = 0.05
        self.log += "\nGaussian input noise: %02f" % sigma
        l_prev = GaussianNoiseLayer(l_prev, sigma=sigma)

        if ccf:
            self.log += "\nAdding cross-channel feature layer"
            l_prev = ReshapeLayer(l_prev, (-1, 1, sequence_length, n_features), name='Reshape')
            l_prev = Conv2DLayer(l_prev,
                                 num_filters=4*n_features,
                                 filter_size=(1, n_features),
                                 nonlinearity=None,
                                 b=None,
                                 name='Conv2D')
            l_prev = BatchNormalizeLayer(l_prev, normalize=batch_norm, nonlinearity=self.transf)
            n_features *= 4
            l_prev = ReshapeLayer(l_prev, (-1, n_features, sequence_length), name='Reshape')
            l_prev = DimshuffleLayer(l_prev, (0, 2, 1), name='Dimshuffle')

        # Convolutional layers
        l_prev = ReshapeLayer(l_prev, (-1, 1, sequence_length, n_features), name='Reshape')
        l_prev = DimshuffleLayer(l_prev, (0, 3, 2, 1), name='Dimshuffle')
        for n_filter, filter_size, pool_size in zip(n_filters, filter_sizes, pool_sizes):
            self.log += "\nAdding 2D conv layer: %d x %d" % (n_filter, filter_size)
            l_prev = Conv2DLayer(l_prev,
                                 num_filters=n_filter,
                                 filter_size=(filter_size, 1),
                                 pad="same",
                                 nonlinearity=None,
                                 b=None,
                                 name='Conv2D')
            l_prev = BatchNormalizeLayer(l_prev, normalize=batch_norm, nonlinearity=self.transf)
            if pool_size > 1:
                self.log += "\nAdding max pooling layer: %d" % pool_size
                l_prev = Pool2DLayer(l_prev, pool_size=(pool_size, 1), name='Max Pool')
            self.log += "\nAdding dropout layer: %.2f" % rcl_dropout
            l_prev = TiedDropoutLayer(l_prev, p=rcl_dropout, name='Dropout')
            self.log += "\nConv out shape: %s" % str(get_output_shape(l_prev))

        # Recurrent Convolutional layers
        filter_size = filter_sizes[0]
        for t in rcl:
            self.log += "\nAdding recurrent conv layer: t: %d, filter size: %s" % (t, filter_size)
            l_prev = RecurrentConvLayer(l_prev,
                                        t=t,
                                        filter_size=filter_size,
                                        nonlinearity=self.transf,
                                        normalize=batch_norm)
            self.log += "\nAdding max pool layer: 2"
            l_prev = Pool2DLayer(l_prev, pool_size=(2, 1), name='Max Pool')
            print("RCL out shape", get_output_shape(l_prev))

        l_prev = GlobalPoolLayer(l_prev, name='Global Max Pool')
        print("GlobalPoolLayer out shape", get_output_shape(l_prev))

        # Append statistics
        if stats > 0:
            l_prev = ConcatLayer((l_prev, stats_layer), axis=1)

        for n_hid in n_hidden:
            self.log += "\nAdding dense layer with %d units" % n_hid
            print("Dense input shape", get_output_shape(l_prev))
            l_prev = DenseLayer(l_prev, num_units=n_hid, nonlinearity=None, b=None, name='Dense')
            l_prev = BatchNormalizeLayer(l_prev, normalize=batch_norm, nonlinearity=self.transf)
            if dropout:
                self.log += "\nAdding output dropout with probability %.2f" % dropout_probability
                l_prev = DropoutLayer(l_prev, p=dropout_probability, name='Dropout')
            if batch_norm:
                self.log += "\nUsing batch normalization"

        self.model = DenseLayer(l_prev, num_units=n_out, nonlinearity=out_func, name='Output')
        self.model_params = get_all_params(self.model)

        self.sym_x = T.tensor3('x')
        self.sym_t = T.matrix('t')
コード例 #5
0
    def __init__(self, n_in, n_filters, n_out, pool_sizes=None, n_hidden=(), ccf=False,
                 conv_dropout=0.0, trans_func=rectify, out_func=softmax, dropout=0.0,
                 batch_norm=False, stats=2):
        super(ResNet, self).__init__(n_in, n_hidden, n_out, trans_func)
        self.outf = out_func
        self.log = ""

        # Overwrite input layer
        sequence_length, n_features = n_in
        self.l_in = InputLayer(shape=(None, sequence_length+stats, n_features), name='Input')
        l_prev = self.l_in
        print("Input shape: ", get_output_shape(l_prev))

        # Separate into raw values and statistics
        if stats > 0:
            stats_layer = SliceLayer(l_prev, indices=slice(sequence_length, None), axis=1)
            stats_layer = ReshapeLayer(stats_layer, (-1, stats*n_features))
            l_prev = SliceLayer(l_prev, indices=slice(0, sequence_length), axis=1)

        if ccf:
            self.log += "\nAdding cross-channel feature layer"
            l_prev = ReshapeLayer(l_prev, (-1, 1, sequence_length, n_features), name='Reshape')
            l_prev = Conv2DLayer(l_prev,
                                 num_filters=4*n_features,
                                 filter_size=(1, n_features),
                                 nonlinearity=None,
                                 b=None,
                                 name='Conv2D')
            l_prev = BatchNormalizeLayer(l_prev, normalize=batch_norm, nonlinearity=self.transf)
            n_features *= 4
            l_prev = ReshapeLayer(l_prev, (-1, n_features, sequence_length), name='Reshape')
            l_prev = DimshuffleLayer(l_prev, (0, 2, 1), name='Dimshuffle')

        # Reshape and order dimensionality
        l_prev = ReshapeLayer(l_prev, (-1, 1, sequence_length, n_features), name='Reshape')
        l_prev = DimshuffleLayer(l_prev, (0, 3, 2, 1), name='Dimshuffle')

        # Convolutional layers
        n_filter, filter_size, pool_size = (16, 3, 2)
        self.log += "\nAdding 2D conv layer: %d x %d" % (n_filter, filter_size)
        l_prev = Conv2DLayer(l_prev,
                             num_filters=n_filter,
                             filter_size=(filter_size, 1),
                             stride=(1, 1),
                             pad="same",
                             nonlinearity=None,
                             b=None,
                             name='Conv2D')
        l_prev = BatchNormalizeLayer(l_prev, normalize=batch_norm, nonlinearity=self.transf)
        if pool_size > 1:
            self.log += "\nAdding max pooling layer: %d" % pool_size
            l_prev = Pool2DLayer(l_prev, pool_size=(pool_size, 1), name='Max Pool')
        if conv_dropout > 0.0:
            self.log += "\nAdding dropout layer: %.2f" % conv_dropout
            l_prev = TiedDropoutLayer(l_prev, p=conv_dropout, name='Tied Dropout')
        print("Conv out shape", get_output_shape(l_prev))

        # Residual modules
        for n_filter, pool_size in zip(n_filters, pool_sizes):
            self.log += "\nAdding residual module: %d" % n_filter
            l_prev = ResidualModule(l_prev,
                                    num_filters=n_filter,
                                    nonlinearity=self.transf,
                                    normalize=batch_norm,
                                    stride=(1, 1),
                                    conv_dropout=conv_dropout)
            if pool_size > 2:
                self.log += "\nAdding max pool layer: %d" % pool_size
                l_prev = Pool2DLayer(l_prev, pool_size=(pool_size, 1), name='Max Pool')
            print("Residual out shape", get_output_shape(l_prev))

        self.log += "\nGlobal Pooling: mean"
        l_prev = GlobalPoolLayer(l_prev, pool_function=T.mean, name='Global pooling layer: mean')
        print("GlobalPoolLayer out shape", get_output_shape(l_prev))

        # Append statistics
        if stats > 0:
            l_prev = ConcatLayer((l_prev, stats_layer), axis=1)

        for n_hid in n_hidden:
            self.log += "\nAdding dense layer with %d units" % n_hid
            print("Dense input shape", get_output_shape(l_prev))
            l_prev = DenseLayer(l_prev, num_units=n_hid, nonlinearity=None, b=None, name='Dense')
            l_prev = BatchNormalizeLayer(l_prev, normalize=batch_norm, nonlinearity=self.transf)
            if dropout > 0.0:
                self.log += "\nAdding output dropout with probability %.2f" % dropout
                l_prev = DropoutLayer(l_prev, p=dropout, name='Dropout')

        if batch_norm:
            self.log += "\nUsing batch normalization"

        self.model = DenseLayer(l_prev, num_units=n_out, nonlinearity=out_func, name='Output')
        self.model_params = get_all_params(self.model)

        self.sym_x = T.tensor3('x')
        self.sym_t = T.matrix('t')
コード例 #6
0
    def __init__(self,
                 n_in,
                 inception_layers,
                 n_out,
                 pool_sizes=None,
                 n_hidden=512,
                 trans_func=rectify,
                 out_func=softmax,
                 output_dropout=0.0,
                 stats=0,
                 batch_norm=False,
                 inception_dropout=0.0):
        super(Incep, self).__init__(n_in, n_hidden, n_out, trans_func)
        self.outf = out_func
        self.log = ""

        # Overwrite input layer
        sequence_length, n_features = n_in
        self.l_in = InputLayer(shape=(None, sequence_length + stats,
                                      n_features),
                               name='Input')
        l_prev = self.l_in

        # Separate into raw values and statistics
        if stats > 0:
            stats_layer = SliceLayer(l_prev,
                                     indices=slice(sequence_length, None),
                                     axis=1)
            stats_layer = ReshapeLayer(stats_layer, (-1, stats * n_features))
            l_prev = SliceLayer(l_prev,
                                indices=slice(0, sequence_length),
                                axis=1)

        # 2D Convolutional layers--------------
        l_prev = ReshapeLayer(l_prev, (-1, 1, sequence_length, n_features),
                              name='Reshape')
        l_prev = DimshuffleLayer(l_prev, (0, 3, 2, 1), name='Dimshuffle')

        # Init with a Conv
        self.log += "\nAdding 2D conv layer: %d x %d" % (32, 3)
        l_prev = Conv2DLayer(l_prev,
                             num_filters=32,
                             filter_size=(3, 1),
                             pad='same',
                             nonlinearity=None,
                             b=None,
                             name='Input Conv2D')
        l_prev = BatchNormalizeLayer(l_prev,
                                     normalize=batch_norm,
                                     nonlinearity=self.transf)
        l_prev = Pool2DLayer(l_prev, pool_size=(2, 1), name='Input pool')
        l_prev = TiedDropoutLayer(l_prev,
                                  p=inception_dropout,
                                  name='Input conv dropout')

        # Inception layers
        for inception_layer, pool_size in zip(inception_layers, pool_sizes):
            num_1x1, num_2x1_proj, reduce_3x1, num_3x1, reduce_5x1, num_5x1 = inception_layer
            self.log += "\nAdding inception layer: %s" % str(inception_layer)
            l_prev = inception_module(l_prev,
                                      num_1x1,
                                      num_2x1_proj,
                                      reduce_3x1,
                                      num_3x1,
                                      reduce_5x1,
                                      num_5x1,
                                      batch_norm=batch_norm)
            if pool_size > 1:
                self.log += "\nAdding max pooling layer: %d" % pool_size
                l_prev = Pool2DLayer(l_prev,
                                     pool_size=(pool_size, 1),
                                     name='Inception pool')

            self.log += "\nAdding dropout layer: %.2f" % inception_dropout
            l_prev = TiedDropoutLayer(l_prev,
                                      p=inception_dropout,
                                      name='Inception dropout')
            print("Inception out shape", l_prev.output_shape)

        # Global pooling layer
        self.log += "\nGlobal Pooling: average"
        l_prev = GlobalPoolLayer(l_prev,
                                 pool_function=T.mean,
                                 name='Global average pool')

        # Append statistics
        if stats > 0:
            l_prev = ConcatLayer((l_prev, stats_layer), axis=1)

        if n_hidden:
            self.log += "\nAdding dense layer with %d units" % n_hidden
            print("Dense input shape", l_prev.output_shape)
            l_prev = DenseLayer(l_prev,
                                num_units=n_hidden,
                                nonlinearity=self.transf,
                                name='Dense')
            if batch_norm:
                l_prev = BatchNormLayer(l_prev)
            if output_dropout:
                self.log += "\nAdding output dropout with probability %.2f" % output_dropout
                l_prev = DropoutLayer(l_prev,
                                      p=output_dropout,
                                      name='Dense dropout')

        self.model = DenseLayer(l_prev,
                                num_units=n_out,
                                nonlinearity=out_func,
                                name='Output')
        self.model_params = get_all_params(self.model)

        self.sym_x = T.tensor3('x')
        self.sym_t = T.matrix('t')
コード例 #7
0
    def __init__(self,
                 n_in,
                 n_hidden,
                 n_out,
                 n_filters,
                 filter_sizes,
                 pool_sizes,
                 stats=2,
                 grad_clip=GRAD_CLIP,
                 peepholes=False,
                 trans_func=rectify,
                 out_func=softmax,
                 factor=1,
                 conv_dropout=0.0,
                 rnn_in_dropout=0.0,
                 rnn_hid_dropout=0.0,
                 output_dropout=0.0,
                 conv_stride=1):
        super(tconvRNN, self).__init__(n_in, n_hidden, n_out, trans_func)
        self.outf = out_func
        self.log = ""

        # Overwrite input layer
        sequence_length, n_features = n_in
        self.l_in = InputLayer(shape=(None, sequence_length + stats,
                                      n_features))
        l_prev = self.l_in
        print("Input shape", get_output_shape(l_prev))

        # Separate into raw values and statistics
        if stats > 0:
            stats_layer = SliceLayer(l_prev,
                                     indices=slice(sequence_length, None),
                                     axis=1)
            stats_layer = ReshapeLayer(stats_layer,
                                       (-1, stats * n_features, 1))
            print('Stats layer shape', stats_layer.output_shape)
            l_prev = SliceLayer(l_prev,
                                indices=slice(0, sequence_length),
                                axis=1)

        # Reshape
        l_prev = ReshapeLayer(l_prev, (-1, 1, sequence_length, n_features))
        # l_prev = DimshuffleLayer(l_prev, (0, 3, 2, 1))

        # Add input noise
        # self.log += "\nAdding noise layer: 0.1"
        # l_prev = GaussianNoiseLayer(l_prev, sigma=0.1)

        # Adding convolutional layers
        print("Conv input shape", get_output_shape(l_prev))
        for n_filter, filter_size, pool_size in zip(n_filters, filter_sizes,
                                                    pool_sizes):
            self.log += "\nAdding 2D conv layer: %d x %d" % (n_filter,
                                                             filter_size)
            l_prev = Conv2DLayer(l_prev,
                                 num_filters=n_filter,
                                 filter_size=(filter_size, 1),
                                 pad=0,
                                 W=init.GlorotNormal('relu'),
                                 b=init.Normal(1e-3),
                                 nonlinearity=self.transf,
                                 stride=(conv_stride, 1))
            if pool_size > 1:
                self.log += "\nAdding max pooling layer: %d" % pool_size
                l_prev = MaxPool2DLayer(l_prev, pool_size=(pool_size, 1))
            if conv_dropout:
                l_prev = TiedDropoutLayer(l_prev, p=conv_dropout)
                self.log += "\nAdding dropout: %.2f" % conv_dropout
        print("Conv out shape", get_output_shape(l_prev))

        # Pool filters
        # self.log += "\nAdding global pooling"
        # l_prev = GlobalPoolLayer(l_prev, pool_function=T.mean)

        # Get output shapes from convnet
        s1, s2, s3, s4 = l_prev.output_shape

        # Reshape for LSTM
        l_prev = DimshuffleLayer(l_prev, (0, 2, 1, 3))
        l_prev = ReshapeLayer(l_prev, (-1, s3, s2 * s4))

        # Concat with statistics
        if stats > 0:
            self.log += "\nConcatenating stats"
            stats_layer = Upscale1DLayer(stats_layer, scale_factor=s3)
            stats_layer = DimshuffleLayer(stats_layer, (0, 2, 1))
            print("Upscaled stats layer, ", stats_layer.output_shape)
            l_prev = ConcatLayer((l_prev, stats_layer), axis=2)

        # Add LSTM layers
        print("LSTM input shape", get_output_shape(l_prev))
        for n_hid in n_hidden:
            self.log += "\nAdding LSTM layer with: %d units" % n_hid
            self.log += "\nLSTM in dropout: %.2f" % rnn_in_dropout
            self.log += "\nLSTM hid dropout: %.2f" % rnn_hid_dropout
            l_prev = LSTMLayer(
                l_prev,
                num_units=n_hid,
                grad_clipping=grad_clip,
                peepholes=peepholes,
                ingate=Gate(W_in=lasagne.init.HeUniform(),
                            W_hid=lasagne.init.HeUniform()),
                forgetgate=Gate(b=lasagne.init.Constant(CONST_FORGET_B)),
                nonlinearity=lasagne.nonlinearities.tanh)
        print("LSTM output shape", get_output_shape(l_prev))

        # Slice last output from RNN
        l_prev = SliceLayer(l_prev, indices=-1, axis=1)
        print("LSTM slice shape", get_output_shape(l_prev))

        # Optional extra dense layer
        l_prev = DenseLayer(l_prev, num_units=30, nonlinearity=trans_func)
        self.log += "\nAdding dense layer with %d units" % 512

        if output_dropout:
            self.log += "\nAdding output dropout with probability: %.2f" % output_dropout
            l_prev = DropoutLayer(l_prev, p=output_dropout)

        # Output
        self.model = DenseLayer(l_prev, num_units=n_out, nonlinearity=out_func)
        print("Output shape", get_output_shape(self.model))

        self.model_params = get_all_params(self.model)
        self.sym_x = T.tensor3('x')
        self.sym_t = T.matrix('t')
    def __init__(self,
                 n_in,
                 n_hidden,
                 n_out,
                 n_filters,
                 filter_sizes,
                 pool_sizes,
                 stats=2,
                 conv_stride=1,
                 grad_clip=GRAD_CLIP,
                 peepholes=False,
                 trans_func=rectify,
                 out_func=softmax,
                 factor=1,
                 conv_dropout=0.0,
                 output_dropout=0.0):
        super(wconvRNN, self).__init__(n_in, n_hidden, n_out, trans_func)
        self.outf = out_func
        self.log = ""

        # Overwrite input layer
        sequence_length, n_features = n_in
        self.l_in = InputLayer(shape=(None, sequence_length, n_features))
        l_prev = self.l_in
        print("Input shape", get_output_shape(l_prev))

        # Reshape
        # batch_size *= factor
        sequence_length /= factor
        l_prev = ReshapeLayer(
            l_prev, (-1, 1, int(sequence_length + stats), n_features))

        # Separate into raw values and statistics
        if stats > 0:
            stats_layer = SliceLayer(l_prev,
                                     indices=slice(sequence_length, None),
                                     axis=2)
            stats_layer = ReshapeLayer(stats_layer,
                                       (-1, factor, stats * n_features))
            print('Stats layer shape', stats_layer.output_shape)
            l_prev = SliceLayer(l_prev,
                                indices=slice(0, sequence_length),
                                axis=2)

        # Shuffle dimensions so features becomes channels
        l_prev = DimshuffleLayer(l_prev, (0, 3, 2, 1))

        # Add input noise
        # self.log += "\nAdding noise layer: 0.05"
        # l_prev = GaussianNoiseLayer(l_prev, sigma=0.05)

        # Adding convolutional layers
        print("Conv input shape", get_output_shape(l_prev))
        for n_filter, filter_size, pool_size in zip(n_filters, filter_sizes,
                                                    pool_sizes):
            self.log += "\nAdding 2D conv layer: %d x %d" % (n_filter,
                                                             filter_size)
            l_prev = Conv2DLayer(l_prev,
                                 num_filters=n_filter,
                                 filter_size=(filter_size, 1),
                                 pad='same',
                                 W=init.GlorotNormal('relu'),
                                 b=init.Normal(1e-3),
                                 nonlinearity=self.transf,
                                 stride=(conv_stride, 1))
            self.log += "\nConv stride: %d" % conv_stride
            if pool_size > 1:
                self.log += "\nAdding max pooling layer: %d" % pool_size
                l_prev = MaxPool2DLayer(l_prev, pool_size=(pool_size, 1))
            if conv_dropout:
                l_prev = TiedDropoutLayer(l_prev, p=conv_dropout)
                self.log += "\nAdding dropout: %.2f" % conv_dropout
        print("Conv out shape", get_output_shape(l_prev))

        # Pool filters
        # self.log += "\nAdding global pooling"
        # l_prev = GlobalPoolLayer(l_prev, pool_function=T.mean)

        # Get output shapes from convnet
        s1, s2, s3, s4 = l_prev.output_shape

        # Reshape for LSTM
        l_prev = ReshapeLayer(l_prev, (-1, factor, s2 * s3 * s4))
        print(l_prev.output_shape)

        # Concat with statistics
        if stats > 0:
            self.log += "\nConcatenating stats"
            l_prev = ConcatLayer((l_prev, stats_layer), axis=2)

        # Add LSTM layers
        print("LSTM input shape", get_output_shape(l_prev))
        for n_hid in n_hidden:
            self.log += "\nAdding LSTM layer with: %d units" % n_hid
            l_prev = LSTMLayer(
                l_prev,
                num_units=n_hid,
                grad_clipping=grad_clip,
                peepholes=peepholes,
                ingate=Gate(W_in=lasagne.init.GlorotNormal(),
                            W_hid=lasagne.init.Orthogonal()),
                forgetgate=Gate(b=lasagne.init.Constant(CONST_FORGET_B)),
                nonlinearity=lasagne.nonlinearities.tanh)
        print("LSTM output shape", get_output_shape(l_prev))

        # Reshape to process each timestep individually
        l_prev = ReshapeLayer(l_prev, (-1, n_hidden[-1]))
        # l_prev = DenseLayer(l_prev, num_units=512, nonlinearity=trans_func)
        # self.log += "\nAdding dense layer with %d units" % 512

        if output_dropout:
            self.log += "\nAdding output dropout with probability: %.2f" % output_dropout
            l_prev = DropoutLayer(l_prev, p=output_dropout)

        # Output
        l_prev = DenseLayer(l_prev, num_units=n_out, nonlinearity=out_func)
        self.model = ReshapeLayer(l_prev, (-1, factor, n_out))
        print("Output shape", get_output_shape(self.model))

        self.model_params = get_all_params(self.model)
        self.sym_x = T.tensor3('x')
        self.sym_t = T.tensor3('t')
コード例 #9
0
    def __init__(self,
                 n_in,
                 n_filters,
                 filter_sizes,
                 n_out,
                 pool_sizes=None,
                 n_hidden=(512),
                 trans_func=rectify,
                 out_func=softmax,
                 dropout=0.0,
                 input_noise=0.0,
                 batch_norm=False,
                 conv_dropout=0.0,
                 slicers=()):
        super(CNN, self).__init__(n_in, n_hidden, n_out, trans_func)
        self.outf = out_func
        self.log = ""

        if pool_sizes is None:
            pool_sizes = [0] * len(n_filters)

        # Overwrite input layer
        sequence_length, n_features = n_in
        self.l_in = InputLayer(shape=(None, sequence_length, n_features))
        l_prev = self.l_in

        # Apply input noise
        # l_prev = GaussianNoiseLayer(l_prev, sigma=input_noise)

        # 2D Convolutional layers
        l_prev = ReshapeLayer(l_prev, (-1, 1, sequence_length, n_features))
        l_prev = DimshuffleLayer(l_prev, (0, 3, 2, 1))

        # Add the convolutional filters
        for n_filter, filter_size, pool_size in zip(n_filters, filter_sizes,
                                                    pool_sizes):
            self.log += "\nAdding 2D conv layer: %d x %d" % (n_filter,
                                                             filter_size)
            l_prev = Conv2DLayer(l_prev,
                                 num_filters=n_filter,
                                 filter_size=(filter_size, 1),
                                 nonlinearity=self.transf,
                                 pad=filter_size // 2)
            if batch_norm:
                l_prev = BatchNormLayer(l_prev)
            if pool_size > 1:
                self.log += "\nAdding max pooling layer: %d" % pool_size
                l_prev = Pool2DLayer(l_prev, pool_size=(pool_size, 1))
            self.log += "\nAdding dropout layer: %.2f" % conv_dropout
            l_prev = TiedDropoutLayer(l_prev, p=conv_dropout)
            print("Conv out shape", get_output_shape(l_prev))

        # Global pooling layer
        l_prev = GlobalPoolLayer(l_prev,
                                 pool_function=T.mean,
                                 name='Global Mean Pool')
        print("GlobalPoolLayer out shape", get_output_shape(l_prev))

        for n_hid in n_hidden:
            self.log += "\nAdding dense layer with %d units" % n_hid
            print("Dense input shape", get_output_shape(l_prev))
            l_prev = DenseLayer(l_prev, n_hid, init.GlorotNormal(),
                                init.Normal(1e-3), self.transf)
            if batch_norm:
                l_prev = BatchNormLayer(l_prev)
            if dropout:
                self.log += "\nAdding dense dropout with probability: %.2f" % dropout
                l_prev = DropoutLayer(l_prev, p=dropout)

        if batch_norm:
            self.log += "\nUsing batch normalization"

        self.model = DenseLayer(l_prev, num_units=n_out, nonlinearity=out_func)
        self.model_params = get_all_params(self.model)

        self.sym_x = T.tensor3('x')
        self.sym_t = T.matrix('t')