Beispiel #1
0
def cnn(X, y):
  nb_classes = y.shape.as_list()[-1]
  with N.args_scope(['Conv', dict(b_init=None, activation=K.linear)],
                    ['BatchNorm', dict(activation=K.relu)]):
    f = N.Sequence([
        N.Dimshuffle(pattern=(0, 2, 3, 1)),
        N.Conv(32, (3, 3), pad='same', stride=(1, 1)),
        N.BatchNorm(),
        N.Conv(32, (3, 3), pad='same', stride=(1, 1),
               b_init=0, activation=K.relu),
        N.Pool(pool_size=(2, 2), strides=None, mode='max'),
        N.Dropout(level=0.25),
        #
        N.Conv(64, (3, 3), pad='same', stride=(1, 1)),
        N.BatchNorm(),
        N.Conv(64, (3, 3), pad='same', stride=(1, 1),
               b_init=0., activation=K.relu),
        N.Pool(pool_size=(2, 2), strides=None, mode='max'),
        N.Dropout(level=0.25),
        #
        N.Flatten(outdim=2),
        N.Dense(512, activation=K.relu),
        N.Dropout(level=0.5),
        N.Dense(nb_classes, activation=K.linear)
    ], debug=1)
  logit = f(X)
  prob = tf.nn.softmax(logit)
  return {'logit': logit, 'prob': prob}
Beispiel #2
0
def gender(X, f, **kwargs):
    nb_gender = kwargs.get('nb_gender', 4)
    if f is None:
        f = N.Sequence([
            N.Dimshuffle(pattern=(0, 1, 2, 'x')),
            N.Conv(num_filters=32,
                   filter_size=3,
                   strides=1,
                   b_init=None,
                   pad='valid'),
            N.BatchNorm(activation=K.relu),
            N.Pool(pool_size=2, mode='avg'),
            N.Conv(num_filters=64,
                   filter_size=3,
                   strides=1,
                   b_init=None,
                   pad='valid'),
            N.BatchNorm(activation=K.relu),
            N.Pool(pool_size=2, mode='avg'),
            N.Flatten(outdim=3),
            N.Dense(num_units=512, b_init=None),
            N.BatchNorm(axes=(0, 1)),
            N.AutoRNN(num_units=128,
                      rnn_mode='gru',
                      num_layers=2,
                      input_mode='linear',
                      direction_mode='unidirectional'),
            N.Flatten(outdim=2),
            N.Dense(num_units=nb_gender, activation=K.softmax)
        ],
                       debug=True)
    return f(X), f
Beispiel #3
0
    def test_pool_depool(self):
        X1 = K.placeholder(shape=(None, 12, 8, 25), name='X1')
        X2 = K.placeholder(shape=(None, 12, 8, 25, 18), name='X2')
        x1 = np.random.rand(13, 12, 8, 25)
        x2 = np.random.rand(13, 12, 8, 25, 18)
        prog = Progbar(target=2 * 2 * 2 * 3, print_report=True)

        def check_shape(s1, s2):
            self.assertEqual(tuple(s1),
                             tuple(s2),
                             msg="%s != %s" % (str(s1), str(s2)))

        for pool_size in (2, 3):
            for strides in (2, 3):
                # strides > window_shape not supported due to inconsistency
                # between CPU and GPU implementations
                if pool_size < strides:
                    prog.add(1)
                    continue
                for pad in ('valid', 'same'):
                    for transpose_mode in ('nn', 'pad_margin', 'repeat'):
                        # ====== print prog ====== #
                        prog['test'] = "Size:%d,Stride:%d,Pad:%s,T:%s" % \
                            (pool_size, strides, pad, transpose_mode)
                        prog.add(1)
                        # ====== check ops 4D ====== #
                        down = N.Pool(pool_size=pool_size,
                                      strides=strides,
                                      pad=pad,
                                      mode='max',
                                      transpose_mode=transpose_mode)
                        up = down.T
                        y1 = down(X1)
                        check_shape(
                            K.eval(y1, {
                                X1: x1
                            }).shape[1:],
                            y1.shape.as_list()[1:])
                        y2 = up(y1)
                        check_shape(K.eval(y2, {X1: x1}).shape, x1.shape)
                        # ====== check ops 5D ====== #
                        down = N.Pool(pool_size=pool_size,
                                      strides=strides,
                                      pad=pad,
                                      mode='max',
                                      transpose_mode=transpose_mode)
                        up = down.T
                        y1 = down(X2)
                        check_shape(
                            K.eval(y1, {
                                X2: x2
                            }).shape[1:], y1.shape[1:])
                        y2 = up(y1)
                        check_shape(K.eval(y2, {X2: x2}).shape, x2.shape)
Beispiel #4
0
 def odin_net2():
     "CNN"
     f = N.Sequence([
         N.Dimshuffle((0, 1, 2, 'x')),
         N.Conv(12, (3, 3), strides=(1, 1), pad='same',
             untie_biases=False,
             W_init=random(3, 3, 1, 12),
             activation=K.relu),
         N.Pool(pool_size=(2, 2), strides=None, mode='max',
                ignore_border=True),
         N.Conv(16, (3, 3), strides=(1, 1), pad='same',
             untie_biases=False,
             W_init=random(3, 3, 12, 16),
             activation=K.sigmoid),
         N.Dimshuffle((0, 3, 1, 2))
     ])
     return X1, f(X1)
Beispiel #5
0
X = K.placeholder(shape=(None,) + input_shape[1:], name='X_input')
y = K.placeholder(shape=(None,), name='y_input')
# ===========================================================================
# Create the network
# ===========================================================================
LATENT_DROPOUT = 0.3
if args.cnn:
  with N.args_scope(([N.Conv, N.Dense], dict(b_init=None, activation=K.linear)),
                    (N.BatchNorm, dict(activation=tf.nn.elu)),
                    (N.Pool, dict(mode='max', pool_size=2))):
    f_encoder = N.Sequence([
        N.Dropout(level=0.5),
        N.Dimshuffle((0, 2, 3, 1)) if is_cifar10 else N.Dimshuffle((0, 1, 2, 'x')),

        N.Conv(num_filters=32, filter_size=3, pad='valid'),
        N.Pool(),
        N.BatchNorm(),

        N.Conv(num_filters=64, filter_size=3, pad='same'),
        N.BatchNorm(),

        N.Conv(num_filters=64, filter_size=3, pad='valid'),
        N.BatchNorm(activation=tf.nn.elu),
        N.Pool(),

        N.Flatten(outdim=2),
        N.Dense(num_units=args.dim)
    ], debug=True, name='EncoderNetwork')

    f_decoder = N.Sequence([
        N.Dropout(level=LATENT_DROPOUT, noise_type='uniform'),
Beispiel #6
0
                  dtype='float32',
                  name='input%d' % i)
    for i, shape in enumerate(as_tuple_of_shape(train.shape))
]
X = inputs[0]
y = inputs[1]
print("Inputs:", ctext(inputs, 'cyan'))
# ====== create the networks ====== #
with N.args_scope([('Conv', 'Dense'),
                   dict(b_init=None, activation=K.linear, pad='same')],
                  ['BatchNorm', dict(activation=K.relu)]):
    f = N.Sequence([
        N.Dimshuffle(pattern=(0, 1, 2, 'x')),
        N.Conv(num_filters=32, filter_size=(9, 7)),
        N.BatchNorm(),
        N.Pool(pool_size=(3, 2), strides=2),
        N.Conv(num_filters=64, filter_size=(5, 3)),
        N.BatchNorm(),
        N.Pool(pool_size=(3, 1), strides=(2, 1), name='PoolOutput1'),
        N.Conv(num_filters=64, filter_size=(5, 3)),
        N.BatchNorm(),
        N.Pool(pool_size=(3, 2), strides=(2, 2), name='PoolOutput2'),
        N.Flatten(outdim=2),
        N.Dense(512, name="LatentDense"),
        N.BatchNorm(),
        N.Dense(512),
        N.BatchNorm(),
        N.Dense(n_classes)
    ],
                   debug=1)
# ====== create outputs ====== #
Beispiel #7
0
X_learn = ds['X_train'][:].astype('float32') / 255.
y_learn = ds['y_train']
X_test = ds['X_test'][:].astype('float32') / 255.
y_test = ds['y_test']

# ===========================================================================
# Create network
# ===========================================================================
X = K.placeholder(shape=(None, ) + X_learn.shape[1:], name='X')
y_true = K.placeholder(shape=(None, ), name='y_true', dtype='int32')

f = N.Sequence([
    N.Dimshuffle(pattern=(0, 2, 3, 1)),
    N.Conv(32, (3, 3), pad='same', stride=(1, 1), activation=K.relu),
    N.Conv(32, (3, 3), pad='same', stride=(1, 1), activation=K.relu),
    N.Pool(pool_size=(2, 2), ignore_border=True, strides=None, mode='max'),
    N.Dropout(level=0.25),
    N.Conv(64, (3, 3), pad='same', stride=(1, 1), activation=K.relu),
    N.Conv(64, (3, 3), pad='same', stride=(1, 1), activation=K.relu),
    N.Pool(pool_size=(2, 2), ignore_border=True, strides=None, mode='max'),
    N.Dropout(level=0.25),
    N.Flatten(outdim=2),
    N.Dense(512, activation=K.relu),
    N.Dropout(level=0.5),
    N.Dense(10, activation=K.softmax)
],
               debug=True)
K.set_training(True)
y_train = f(X)
K.set_training(False)
y_pred = f(X)
      np.sum(X_valid), np.sum(y_valid))
# ===========================================================================
# Building model
# ===========================================================================
X = K.placeholder(shape=(None, MAX_SEQ_LEN), dtype='int32', name='X')
y = K.placeholder(shape=(None, nb_labels), dtype='float32', name='y')

f = N.Sequence([
    N.Embedding(tk.nb_words, embedding_dims, W_init=E),
    N.Dimshuffle(pattern=(0, 1, 'x', 2)),
    N.Conv(num_filters=128,
           filter_size=(5, 1),
           strides=1,
           pad='valid',
           activation=K.relu),
    N.Pool(pool_size=(5, 1), pad='valid', mode='max'),
    N.Conv(num_filters=128,
           filter_size=(5, 1),
           strides=1,
           pad='valid',
           activation=K.relu),
    N.Pool(pool_size=(5, 1), pad='valid', mode='max'),
    N.Conv(num_filters=128,
           filter_size=(5, 1),
           strides=1,
           pad='valid',
           activation=K.relu),
    N.Pool(pool_size=(35, 1), pad='valid', mode='max'),
    N.Flatten(outdim=2),
    N.Dense(num_units=128, activation=K.relu),
    N.Dense(num_units=nb_labels, activation=K.softmax)
Beispiel #9
0
if USE_MNIST_DATA:
    ds = fuel.load_mnist()
else:
    ds = fuel.load_cifar10()

X = K.placeholder(shape=(None, ) + ds['X_train'].shape[1:], name='X')
y = K.placeholder(shape=(None, ), name='y', dtype='int32')

# ===========================================================================
# Build network
# ===========================================================================
ops = N.Sequence([
    N.Dimshuffle((0, 1, 2, 'x')) if USE_MNIST_DATA else None,
    N.BatchNorm(axes='auto'),
    N.Conv(32, (3, 3), strides=(1, 1), pad='same', activation=K.relu),
    N.Pool(pool_size=(2, 2), strides=None),
    N.Conv(64, (3, 3), strides=(1, 1), pad='same', activation=K.relu),
    N.Pool(pool_size=(2, 2), strides=None),
    N.Flatten(outdim=2),
    N.Dense(256, activation=K.relu),
    N.Dense(10, activation=K.softmax)
],
                 debug=True)
ops = cPickle.loads(cPickle.dumps(ops))  # test if the ops is pickle-able

K.set_training(True)
y_pred_train = ops(X)
K.set_training(False)
y_pred_score = ops(X)

cost_train = K.mean(K.categorical_crossentropy(y_pred_train, y))
Beispiel #10
0
y = K.placeholder(shape=(None, ), name='y', dtype='int32')

# ===========================================================================
# Build model
# ===========================================================================
f = N.Sequence(
    [
        N.Embedding(max_features, embedding_size),
        N.Dropout(0.25),
        N.Dimshuffle(pattern=(0, 1, 'x', 2)),  # convolution on time dimension
        N.Conv(nb_filter,
               filter_size=(filter_length, 1),
               pad='valid',
               stride=(1, 1),
               activation=K.relu),
        N.Pool(pool_size=(pool_length, 1), mode='max'),
        N.Flatten(outdim=3),
        N.Merge(
            [
                N.Dense(lstm_output_size, activation=K.linear,
                        name='ingate'),  # input-gate
                N.Dense(lstm_output_size,
                        activation=K.linear,
                        name='forgetgate'),  # forget-gate
                N.Dense(lstm_output_size,
                        activation=K.linear,
                        name='cellupdate'),  # cell-update
                N.Dense(lstm_output_size, activation=K.linear,
                        name='outgate')  # output-gate
            ],
            merge_function=K.concatenate),
# ===========================================================================
# Create model
# ===========================================================================
inputs = [
    K.placeholder(shape=(None, ) + shape[1:],
                  dtype='float32',
                  name='input%d' % i) for i, shape in enumerate(train.shape)
]
print("Inputs:", ctext(inputs, 'cyan'))
# ====== create the network ====== #
f_encoder = N.Sequence([
    N.Dimshuffle(pattern=(0, 1, 2, 'x')),
    N.Conv(
        num_filters=32, filter_size=(7, 7), b_init=None, activation=K.linear),
    N.BatchNorm(),
    N.Pool(pool_size=(3, 2), strides=2),
],
                       debug=True,
                       name='Encoder')
f_latent = N.Sequence([
    N.Flatten(outdim=3),
    N.CudnnRNN(
        num_units=128, num_layers=1, is_bidirectional=False, rnn_mode='lstm'),
],
                      debug=True,
                      name='Latent')
f_decoder = N.Sequence([
    N.Flatten(outdim=2),
    N.Dense(num_units=1024, b_init=None, activation=K.linear),
    N.BatchNorm(axes=0, activation=K.relu)
],
Beispiel #12
0
f = N.Sequence(
    [
        N.Dimshuffle(pattern=(0, 1, 2, 'x')),
        N.Conv(num_filters=32,
               filter_size=3,
               pad='same',
               strides=1,
               activation=K.linear),
        N.BatchNorm(activation=K.relu),
        N.Conv(num_filters=64,
               filter_size=3,
               pad='same',
               strides=1,
               activation=K.linear),
        N.BatchNorm(activation=K.relu),
        N.Pool(pool_size=2, strides=None, pad='valid', mode='max'),
        N.Flatten(outdim=3),

        # ====== RNN ====== #
        N.AutoRNN(128,
                  rnn_mode='lstm',
                  num_layers=3,
                  direction_mode='bidirectional',
                  prefer_cudnn=True),

        # ====== Dense ====== #
        N.Flatten(outdim=2),
        # N.Dropout(level=0.2), # adding dropout does not help
        N.Dense(num_units=1024, activation=K.relu),
        N.Dense(num_units=512, activation=K.relu),
        N.Dense(num_units=nb_classes, activation=K.softmax)
Beispiel #13
0
else:
    ds = fuel.load_cifar10()
print(ds)

X = K.placeholder(shape=(None, ) + ds['X_train'].shape[1:], name='X')
y = K.placeholder(shape=(None, ), name='y', dtype='int32')

# ===========================================================================
# Build network
# ===========================================================================
ops = N.Sequence([
    N.Dimshuffle((0, 1, 2, 'x')) if USE_MNIST_DATA else N.Dimshuffle(
        (0, 2, 3, 1)),
    N.Conv(32, filter_size=3, strides=1, pad='same', activation=K.linear),
    N.BatchNorm(axes='auto', activation=K.relu),
    N.Pool(pool_size=2, strides=None),
    N.Dimshuffle(pattern=(0, 3, 1, 2)),
    N.Flatten(outdim=3),
    N.CudnnRNN(18,
               initial_states=None,
               rnn_mode='lstm',
               num_layers=2,
               input_mode='linear',
               direction_mode='unidirectional',
               params_split=False),
    N.Flatten(outdim=2),
    N.Dense(128, activation=K.relu),
    N.Dense(10, activation=K.softmax)
],
                 debug=True)
ops = cPickle.loads(cPickle.dumps(ops))  # test if the ops is pickle-able
Beispiel #14
0
# ===========================================================================
X = K.placeholder(shape=(None, ) + ds['X_train'].shape[1:],
                  name='X',
                  dtype='int32')
y = K.placeholder(shape=(None, ), name='y', dtype='int32')

net_odin = N.Sequence(
    [
        N.Embedding(input_size=max_features, output_size=embedding_size),
        N.Dropout(level=0.25),
        N.Dimshuffle(pattern=(0, 1, 'x', 2)),
        N.Conv(nb_filter, (filter_length, 1),
               strides=1,
               pad='valid',
               activation=K.relu),
        N.Pool(pool_size=(pool_length, 1), pad='valid', mode='max'),
        N.Flatten(outdim=3),
        # ====== LSTM ====== #
        N.Merge(
            [
                N.Dense(lstm_output_size, activation=K.linear,
                        name='ingate'),  # input-gate
                N.Dense(lstm_output_size,
                        activation=K.linear,
                        name='forgetgate'),  # forget-gate
                N.Dense(lstm_output_size,
                        activation=K.linear,
                        name='cellupdate'),  # cell-update
                N.Dense(lstm_output_size, activation=K.linear,
                        name='outgate')  # output-gate
            ],