Beispiel #1
0
def model_fn(features, labels, mode, params):
    x = tf.reshape(features, [-1, 99, 161, 1], name='input_incep4')
    x_norm = tf.layers.batch_normalization(x, training=mode == tf.estimator.ModeKeys.TRAIN, name='x_norm')
    if params['verbose_summary']:
        tf.summary.image('input', x)

    conv1 = tf.layers.conv2d(x_norm, filters=16, kernel_size=3, padding='same', activation=tf.nn.relu, name='conv1')
    conv1b = tf.layers.conv2d(conv1, filters=16, kernel_size=3, activation=tf.nn.relu, name='conv1b')
    pool1 = tf.layers.max_pooling2d(conv1b, pool_size=[2, 2], strides=2, name='pool1')
    if params['verbose_summary']:
        log_conv_kernel('conv1')
        log_conv_kernel('conv1b')
        tf.summary.image('pool1', pool1[:, :, :, 0:1])

    incep2 = inception_block(conv1, name='incep2')
    incep3 = inception_block(incep2, t1x1=4, t3x3=4, t5x5=4, tmp=4, name='incep3')
    incep4 = inception_block(incep3, t1x1=8, t3x3=8, t5x5=8, tmp=8, name='incep4')
    incep5 = inception_block(incep4, t1x1=16, t3x3=16, t5x5=16, tmp=16, name='incep5')
    incep6 = inception_block(incep5, t1x1=20, t3x3=20, t5x5=20, tmp=20, name='incep6')

    flat = flatten(incep6)
    dropout4 = tf.layers.dropout(flat, rate=params['dropout_rate'], training=mode == tf.estimator.ModeKeys.TRAIN, name='dropout4')
    dense4 = tf.layers.dense(dropout4, units=2048, activation=tf.nn.relu, name='dense4')

    logits = tf.layers.dense(dense4, units=params['num_classes'], name='logits')

    predictions = {
        'classes': tf.argmax(logits, axis=1, name='prediction_classes'),
        'probabilities': tf.nn.softmax(logits, name='prediction_softmax')
    }

    if mode == tf.estimator.ModeKeys.PREDICT:
        return tf.estimator.EstimatorSpec(mode=mode, predictions={'predictions': predictions['probabilities']})

    onehot_labels = tf.one_hot(indices=tf.cast(labels, tf.int32), depth=params['num_classes'], name='onehot_labels')
    loss = tf.losses.softmax_cross_entropy(onehot_labels=onehot_labels, logits=logits)
    tf.summary.scalar('loss', loss)

    optimizer = tf.train.GradientDescentOptimizer(learning_rate=params['learning_rate'])
    update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
    with tf.control_dependencies(update_ops):
        train_op = optimizer.minimize(loss=loss, global_step=tf.train.get_global_step())
    eval_metric_ops = {
        'accuracy': tf.metrics.accuracy(labels=labels, predictions=predictions['classes'])
    }

    tf.summary.scalar('accuracy', eval_metric_ops['accuracy'][1])

    return tf.estimator.EstimatorSpec(
        mode=mode,
        loss=loss,
        train_op=train_op,
        eval_metric_ops=eval_metric_ops
    )
Beispiel #2
0
def model_fn(features, labels, mode, params):
    x = tf.reshape(features, [-1, 125, 161, 2], name='input_incep100_lg')
    x_norm = tf.layers.batch_normalization(x, training=mode == tf.estimator.ModeKeys.TRAIN, name='x_norm')
    if params['verbose_summary']:
        with tf.variable_scope('input'):
            for sample in range(3):
                tf.summary.image('input_spec_{}'.format(sample), tf.reshape(x[sample, :, :, 0], [-1, 125, 161, 1]))
                tf.summary.image('input_freq_{}'.format(sample), tf.reshape(x[sample, :, :, 1], [-1, 125, 161, 1]))

    conv1 = tf.layers.conv2d(x_norm, filters=16, kernel_size=3, padding='same', activation=tf.nn.relu, name='conv1')
    conv1b = tf.layers.conv2d(conv1, filters=16, kernel_size=3, activation=tf.nn.relu, name='conv1b')
    pool1 = tf.layers.max_pooling2d(conv1b, pool_size=[2, 2], strides=2, name='pool1')
    if params['verbose_summary']:
        log_conv_kernel('conv1')
        log_conv_kernel('conv1b')
        tf.summary.image('pool1', pool1[:, :, :, 0:1])

    incep2 = inception_block(pool1, t1x1=8, t3x3=8, t5x5=8, tmp=8, name='incep2')

    conv3 = tf.layers.conv2d(incep2, filters=32, kernel_size=3, padding='same', activation=tf.nn.relu, name='conv3')
    conv3b = tf.layers.conv2d(conv3, filters=32, kernel_size=3, activation=tf.nn.relu, name='conv3b')
    pool3 = tf.layers.max_pooling2d(conv3b, pool_size=[2, 2], strides=2, name='pool3')
    if params['verbose_summary']:
        log_conv_kernel('conv3')
        log_conv_kernel('conv3b')
        tf.summary.image('pool3', pool3[:, :, :, 0:1])

    conv5 = tf.layers.conv2d(pool3, filters=64, kernel_size=3, padding='same', activation=tf.nn.relu, name='conv5')
    conv5b = tf.layers.conv2d(conv5, filters=64, kernel_size=3, activation=tf.nn.relu, name='conv5b')
    pool5 = tf.layers.max_pooling2d(conv5b, pool_size=[2, 2], strides=2, name='pool5')
    if params['verbose_summary']:
        log_conv_kernel('conv5')
        log_conv_kernel('conv5b')
        tf.summary.image('pool5', pool5[:, :, :, 0:1])

    incep6 = inception_block(pool5, t1x1=32, t3x3=32, t5x5=32, tmp=32, name='incep6')

    conv7 = tf.layers.conv2d(incep6, filters=128, kernel_size=3, padding='same', activation=tf.nn.relu, name='conv7')
    conv7b = tf.layers.conv2d(conv7, filters=128, kernel_size=3, activation=tf.nn.relu, name='conv7b')
    pool7 = tf.layers.max_pooling2d(conv7b, pool_size=[2, 2], strides=2, name='pool7')
    if params['verbose_summary']:
        log_conv_kernel('conv7')
        log_conv_kernel('conv7b')
        tf.summary.image('pool7', pool7[:, :, :, 0:1])

    conv8 = tf.layers.conv2d(pool7, filters=256, kernel_size=3, padding='same', activation=tf.nn.relu, name='conv8')
    conv8b = tf.layers.conv2d(conv8, filters=256, kernel_size=3, activation=tf.nn.relu, name='conv8b')
    pool8 = tf.layers.max_pooling2d(conv8b, pool_size=[2, 2], strides=2, name='pool8')
    if params['verbose_summary']:
        log_conv_kernel('conv8')
        log_conv_kernel('conv8b')
        tf.summary.image('pool8', pool8[:, :, :, 0:1])

    flat = flatten(pool8)
    dense4 = tf.layers.dense(flat, units=2048, activation=tf.nn.relu, name='dense4')
    dropout4 = tf.layers.dropout(dense4, rate=params['dropout_rate'], training=mode == tf.estimator.ModeKeys.TRAIN, name='dropout4')

    logits = tf.layers.dense(dropout4, units=params['num_classes'], name='logits')

    predictions = {
        'classes': tf.argmax(logits, axis=1, name='prediction_classes'),
        'probabilities': tf.nn.softmax(logits, name='prediction_softmax')
    }

    if mode == tf.estimator.ModeKeys.PREDICT:
        return tf.estimator.EstimatorSpec(mode=mode, predictions={'predictions': predictions['probabilities']})

    onehot_labels = tf.one_hot(indices=tf.cast(labels, tf.int32), depth=params['num_classes'], name='onehot_labels')
    loss = tf.losses.softmax_cross_entropy(onehot_labels=onehot_labels, logits=logits)
    tf.summary.scalar('loss', loss)

    optimizer = tf.train.GradientDescentOptimizer(learning_rate=params['learning_rate'])
    update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
    with tf.control_dependencies(update_ops):
        train_op = optimizer.minimize(loss=loss, global_step=tf.train.get_global_step())
    eval_metric_ops = {
        'accuracy': tf.metrics.accuracy(labels=labels, predictions=predictions['classes'])
    }

    tf.summary.scalar('accuracy', eval_metric_ops['accuracy'][1])

    return tf.estimator.EstimatorSpec(
        mode=mode,
        loss=loss,
        train_op=train_op,
        eval_metric_ops=eval_metric_ops
    )
Beispiel #3
0
def model_fn(features, labels, mode, params):
    with tf.variable_scope('x_prep'):
        x = tf.reshape(features, [-1, 125, 161, 2], name='deception1')
        x_norm = tf.layers.batch_normalization(
            x, training=mode == tf.estimator.ModeKeys.TRAIN, name='x_norm')
        x = tf.reshape(x_norm[:, :, :, 0], [-1, 125, 161, 1],
                       name='reshape_spec')

    if params['verbose_summary']:
        tf.summary.image('input', x)

    conv = tf.layers.conv2d(x,
                            filters=32,
                            kernel_size=11,
                            activation=tf.nn.relu,
                            name='conv1')
    conv = tf.layers.conv2d(conv,
                            filters=64,
                            kernel_size=3,
                            activation=tf.nn.relu,
                            name='conv3')
    conv = tf.layers.conv2d(conv,
                            filters=128,
                            kernel_size=3,
                            activation=tf.nn.relu,
                            name='conv4')
    conv = tf.layers.conv2d(conv,
                            filters=256,
                            kernel_size=3,
                            activation=tf.nn.relu,
                            name='conv5')

    incep = inception_block(conv,
                            t1x1=32,
                            t3x3=32,
                            t5x5=32,
                            tmp=32,
                            name='incep6',
                            norm=True,
                            mode=mode)
    incep = inception_block(incep,
                            t1x1=64,
                            t3x3=64,
                            t5x5=64,
                            tmp=64,
                            name='incep7',
                            norm=True,
                            mode=mode)

    pool = tf.layers.max_pooling2d(incep,
                                   pool_size=[2, 2],
                                   strides=2,
                                   name='pool7')

    incep = inception_block(pool,
                            t1x1=64,
                            t3x3=64,
                            t5x5=64,
                            tmp=64,
                            name='incep8',
                            norm=True,
                            mode=mode)
    incep = inception_block(incep,
                            t1x1=64,
                            t3x3=64,
                            t5x5=64,
                            tmp=64,
                            name='incep9',
                            norm=True,
                            mode=mode)

    pool = tf.layers.max_pooling2d(incep,
                                   pool_size=[2, 2],
                                   strides=2,
                                   name='pool9')

    incep = inception_block(pool,
                            t1x1=128,
                            t3x3=128,
                            t5x5=128,
                            tmp=128,
                            name='incep10',
                            norm=True,
                            mode=mode)

    pool = tf.layers.max_pooling2d(incep,
                                   pool_size=[2, 2],
                                   strides=2,
                                   name='pool11')

    flat = flatten(pool, name='flatten')
    dropout = tf.layers.dropout(flat,
                                rate=params['dropout_rate'],
                                training=mode == tf.estimator.ModeKeys.TRAIN,
                                name='dropout')
    dense = tf.layers.dense(dropout,
                            units=2048,
                            activation=tf.nn.relu,
                            name='dense')

    logits = tf.layers.dense(dense, units=params['num_classes'], name='logits')

    predictions = {
        'classes': tf.argmax(logits, axis=1, name='prediction_classes'),
        'probabilities': tf.nn.softmax(logits, name='prediction_softmax')
    }

    if mode == tf.estimator.ModeKeys.PREDICT:
        return tf.estimator.EstimatorSpec(
            mode=mode,
            predictions={'predictions': predictions['probabilities']})

    onehot_labels = tf.one_hot(indices=tf.cast(labels, tf.int32),
                               depth=params['num_classes'],
                               name='onehot_labels')
    loss = tf.losses.softmax_cross_entropy(onehot_labels=onehot_labels,
                                           logits=logits)
    tf.summary.scalar('loss', loss)

    optimizer = tf.train.GradientDescentOptimizer(
        learning_rate=params['learning_rate'])
    update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
    with tf.control_dependencies(update_ops):
        train_op = optimizer.minimize(loss=loss,
                                      global_step=tf.train.get_global_step())
    eval_metric_ops = {
        'accuracy':
        tf.metrics.accuracy(labels=labels, predictions=predictions['classes'])
    }

    tf.summary.scalar('accuracy', eval_metric_ops['accuracy'][1])

    return tf.estimator.EstimatorSpec(mode=mode,
                                      loss=loss,
                                      train_op=train_op,
                                      eval_metric_ops=eval_metric_ops)
Beispiel #4
0
def branch_incep(x, name, mode, params):
    with tf.variable_scope(name):
        conv1 = tf.layers.conv2d(x,
                                 filters=16,
                                 kernel_size=3,
                                 padding='same',
                                 activation=tf.nn.relu,
                                 name='conv1')
        conv1b = tf.layers.conv2d(conv1,
                                  filters=16,
                                  kernel_size=3,
                                  activation=tf.nn.relu,
                                  name='conv1b')
        pool1 = tf.layers.max_pooling2d(conv1b,
                                        pool_size=[2, 2],
                                        strides=2,
                                        name='pool1')
        if params['verbose_summary']:
            log_conv_kernel('{}/conv1'.format(name))
            log_conv_kernel('{}/conv1b'.format(name))
            tf.summary.image('pool1', pool1[:, :, :, 0:1])

        incep2 = inception_block(pool1,
                                 t1x1=8,
                                 t3x3=8,
                                 t5x5=8,
                                 tmp=8,
                                 name='incep2')

        conv3 = tf.layers.conv2d(incep2,
                                 filters=32,
                                 kernel_size=3,
                                 padding='same',
                                 activation=tf.nn.relu,
                                 name='conv3')
        conv3b = tf.layers.conv2d(conv3,
                                  filters=32,
                                  kernel_size=3,
                                  activation=tf.nn.relu,
                                  name='conv3b')
        pool3 = tf.layers.max_pooling2d(conv3b,
                                        pool_size=[2, 2],
                                        strides=2,
                                        name='pool3')
        if params['verbose_summary']:
            log_conv_kernel('{}/conv3'.format(name))
            log_conv_kernel('{}/conv3b'.format(name))
            tf.summary.image('pool3', pool3[:, :, :, 0:1])

        conv5 = tf.layers.conv2d(pool3,
                                 filters=64,
                                 kernel_size=3,
                                 padding='same',
                                 activation=tf.nn.relu,
                                 name='conv5')
        conv5b = tf.layers.conv2d(conv5,
                                  filters=64,
                                  kernel_size=3,
                                  activation=tf.nn.relu,
                                  name='conv5b')
        pool5 = tf.layers.max_pooling2d(conv5b,
                                        pool_size=[2, 2],
                                        strides=2,
                                        name='pool5')
        if params['verbose_summary']:
            log_conv_kernel('{}/conv5'.format(name))
            log_conv_kernel('{}/conv5b'.format(name))
            tf.summary.image('pool5', pool5[:, :, :, 0:1])

        incep6 = inception_block(pool5,
                                 t1x1=32,
                                 t3x3=32,
                                 t5x5=32,
                                 tmp=32,
                                 name='incep6')

        conv7 = tf.layers.conv2d(incep6,
                                 filters=128,
                                 kernel_size=3,
                                 padding='same',
                                 activation=tf.nn.relu,
                                 name='conv7')
        conv7b = tf.layers.conv2d(conv7,
                                  filters=128,
                                  kernel_size=3,
                                  activation=tf.nn.relu,
                                  name='conv7b')
        pool7 = tf.layers.max_pooling2d(conv7b,
                                        pool_size=[2, 2],
                                        strides=2,
                                        name='pool7')
        if params['verbose_summary']:
            log_conv_kernel('{}/conv7'.format(name))
            log_conv_kernel('{}/conv7b'.format(name))
            tf.summary.image('pool7', pool7[:, :, :, 0:1])

        conv8 = tf.layers.conv2d(pool7,
                                 filters=256,
                                 kernel_size=3,
                                 padding='same',
                                 activation=tf.nn.relu,
                                 name='conv8')
        conv8b = tf.layers.conv2d(conv8,
                                  filters=256,
                                  kernel_size=3,
                                  activation=tf.nn.relu,
                                  name='conv8b')
        pool8 = tf.layers.max_pooling2d(conv8b,
                                        pool_size=[2, 2],
                                        strides=2,
                                        name='pool8')
        if params['verbose_summary']:
            log_conv_kernel('{}/conv8'.format(name))
            log_conv_kernel('{}/conv8b'.format(name))
            tf.summary.image('pool8', pool8[:, :, :, 0:1])

        return pool8
def model_fn(features, labels, mode, params):
    training = mode == tf.estimator.ModeKeys.TRAIN
    # x = tf.layers.batch_normalization(features, training=training, name='x_norm__simple_inception')
    tf.summary.image('0_input', features)

    x = tf.layers.conv2d(features,
                         filters=16,
                         kernel_size=7,
                         activation=None,
                         name='l1')
    x = tf.layers.batch_normalization(x, training=training, name='batch_norm1')
    x = tf.nn.relu(x, name='act1')
    tf.summary.image('1_1l1', x[:, :, :, 0:3], max_outputs=4)

    x = tf.layers.max_pooling2d(x, pool_size=3, strides=2, name='maxpool1')
    tf.summary.image('1_2maxpool', x[:, :, :, 0:3], max_outputs=4)

    x = tf.layers.conv2d(x,
                         filters=32,
                         kernel_size=3,
                         activation=None,
                         name='l2')
    x = tf.layers.batch_normalization(x, training=training, name='batch_norm2')
    x = tf.nn.relu(x, name='act2')
    tf.summary.image('2_1l2', x[:, :, :, 0:3], max_outputs=4)

    x = tf.layers.max_pooling2d(x, pool_size=3, strides=2, name='maxpool2')
    tf.summary.image('2_2maxpool', x[:, :, :, 0:3], max_outputs=4)

    x = util.inception_block(x,
                             t1x1=32,
                             t3x3=42,
                             t5x5=16,
                             tmp=16,
                             training=training,
                             name='3_incep_1')
    x = util.inception_block(x,
                             t1x1=64,
                             t3x3=128,
                             t5x5=52,
                             tmp=43,
                             training=training,
                             name='4_incep_2')
    x = tf.layers.max_pooling2d(x, pool_size=3, strides=2, name='maxpool3')
    tf.summary.image('3_1maxpool', x[:, :, :, 0:3], max_outputs=4)

    x = util.inception_block(x,
                             t1x1=96,
                             t3x3=128,
                             t5x5=16,
                             tmp=16,
                             training=training,
                             name='6_incep_3')
    x = util.inception_block(x,
                             t1x1=96,
                             t3x3=128,
                             t5x5=16,
                             tmp=16,
                             training=training,
                             name='7_incep_4')
    x = tf.layers.max_pooling2d(x, pool_size=3, strides=2, name='maxpool4')
    tf.summary.image('4_1maxpool', x[:, :, :, 0:3], max_outputs=4)

    #  x = util.inception_block(x, t1x1=96, t3x3=128, t5x5=16, tmp=16, training=training, name='8_incep_5')
    #  x = util.inception_block(x, t1x1=96, t3x3=128, t5x5=16, tmp=16, training=training, name='9_incep_6')
    #  x = tf.layers.max_pooling2d(x, pool_size=3, strides=2, name='maxpool5')
    #  tf.summary.image('9_maxpool', x[:, :, :, 0:3], max_outputs=4)

    x = util.inception_block(x,
                             t1x1=128,
                             t3x3=256,
                             t5x5=32,
                             tmp=16,
                             training=training,
                             name='10_incep_7')
    x = util.inception_block(x,
                             t1x1=128,
                             t3x3=256,
                             t5x5=32,
                             tmp=16,
                             training=training,
                             name='11_incep_8')
    x = tf.layers.max_pooling2d(x, pool_size=3, strides=2, name='maxpool6')
    tf.summary.image('5_1maxpool', x[:, :, :, 0:3], max_outputs=4)

    flat = tf.contrib.layers.flatten(x, scope='flatten')
    dropout = tf.layers.dropout(flat,
                                rate=params['dropout_rate'],
                                training=training,
                                name='dropout')
    fc = tf.layers.dense(dropout, units=1028, name='fc')

    logits = tf.layers.dense(fc, units=params['num_classes'], name='logits')

    predictions = {
        'argmax': tf.argmax(logits, axis=1, name='prediction_classes'),
        'softmax': tf.nn.softmax(logits, name='prediction_softmax')
    }

    if mode == tf.estimator.ModeKeys.PREDICT:
        return tf.estimator.EstimatorSpec(mode=mode, predictions=predictions)

    onehot_labels = tf.one_hot(indices=labels,
                               depth=params['num_classes'],
                               name='onehot_labels')
    loss = tf.losses.softmax_cross_entropy(onehot_labels=onehot_labels,
                                           logits=logits)
    tf.summary.scalar('loss', loss)

    optimizer = tf.train.GradientDescentOptimizer(
        learning_rate=params['learning_rate'])
    extra_update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
    with tf.control_dependencies(extra_update_ops):
        train_op = optimizer.minimize(loss=loss,
                                      global_step=tf.train.get_global_step())
    eval_metric_ops = {
        'accuracy_val':
        tf.metrics.accuracy(labels=labels, predictions=predictions['argmax'])
    }

    tf.summary.histogram('labels', labels)
    tf.summary.scalar('accuracy_train', eval_metric_ops['accuracy_val'][1])

    return tf.estimator.EstimatorSpec(mode=mode,
                                      loss=loss,
                                      train_op=train_op,
                                      eval_metric_ops=eval_metric_ops)
Beispiel #6
0
def model_fn(features, labels, mode, params):
    x = tf.reshape(features, [-1, 125, 161, 2], name='stricCnn5')
    x_norm = tf.layers.batch_normalization(
        x, training=mode == tf.estimator.ModeKeys.TRAIN, name='x_norm')
    x = tf.reshape(x_norm[:, :, :, 0], [-1, 125, 161, 1], name='reshape_spec')

    conv = x
    conv = stric_block(conv, 32, mode, 'conv_1')
    conv = stric_block(conv, 64, mode, 'conv_2')
    conv = stric_block(conv, 128, mode, 'conv_3')
    conv = stric_block(conv, 256, mode, 'conv_4')
    conv = stric_block(conv, 512, mode, 'conv_5', only_same=True)

    incep = inception_block(conv,
                            t1x1=128,
                            t3x3=128,
                            t5x5=128,
                            tmp=128,
                            name='incep6')
    incep = inception_block(incep,
                            t1x1=128,
                            t3x3=128,
                            t5x5=128,
                            tmp=128,
                            name='incep7')
    incep = inception_block(incep,
                            t1x1=128,
                            t3x3=128,
                            t5x5=128,
                            tmp=128,
                            name='incep8')

    flat = flatten(incep)
    dropout1 = tf.layers.dropout(flat,
                                 rate=params['dropout_rate'],
                                 training=mode == tf.estimator.ModeKeys.TRAIN,
                                 name='dropout1')
    dense1 = tf.layers.dense(dropout1,
                             units=2048,
                             activation=tf.nn.relu,
                             name='dense1')
    dropout2 = tf.layers.dropout(dense1,
                                 rate=params['dropout_rate'],
                                 training=mode == tf.estimator.ModeKeys.TRAIN,
                                 name='dropout2')
    dense2 = tf.layers.dense(dropout2,
                             units=2048,
                             activation=tf.nn.relu,
                             name='dense2')
    dropout3 = tf.layers.dropout(dense2,
                                 rate=params['dropout_rate'],
                                 training=mode == tf.estimator.ModeKeys.TRAIN,
                                 name='dropout3')

    logits = tf.layers.dense(dropout3,
                             units=params['num_classes'],
                             name='logits')

    predictions = {
        'classes': tf.argmax(logits, axis=1, name='prediction_classes'),
        'probabilities': tf.nn.softmax(logits, name='prediction_softmax')
    }

    if mode == tf.estimator.ModeKeys.PREDICT:
        return tf.estimator.EstimatorSpec(
            mode=mode,
            predictions={'predictions': predictions['probabilities']})

    tf.summary.image(
        'confusion_matrix',
        conf_mat(labels, predictions['classes'], params['num_classes']))

    onehot_labels = tf.one_hot(indices=tf.cast(labels, tf.int32),
                               depth=params['num_classes'],
                               name='onehot_labels')
    loss = tf.losses.softmax_cross_entropy(onehot_labels=onehot_labels,
                                           logits=logits)
    tf.summary.scalar('loss', loss)

    optimizer = tf.train.GradientDescentOptimizer(
        learning_rate=params['learning_rate'])
    update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
    with tf.control_dependencies(update_ops):
        train_op = optimizer.minimize(loss=loss,
                                      global_step=tf.train.get_global_step())
    eval_metric_ops = {
        'accuracy':
        tf.metrics.accuracy(labels=labels, predictions=predictions['classes'])
    }

    tf.summary.scalar('accuracy', eval_metric_ops['accuracy'][1])

    return tf.estimator.EstimatorSpec(mode=mode,
                                      loss=loss,
                                      train_op=train_op,
                                      eval_metric_ops=eval_metric_ops)
Beispiel #7
0
def branch(x, name, mode, params):
    with tf.variable_scope(name):
        conv1 = tf.layers.conv2d(x,
                                 filters=16,
                                 kernel_size=3,
                                 padding='same',
                                 activation=tf.nn.relu,
                                 name='conv1')
        conv1b = tf.layers.conv2d(conv1,
                                  filters=16,
                                  kernel_size=3,
                                  activation=tf.nn.relu,
                                  name='conv1b')
        pool1 = tf.layers.max_pooling2d(conv1b,
                                        pool_size=[2, 2],
                                        strides=2,
                                        name='pool1')
        if params['verbose_summary']:
            log_conv_kernel('{}/conv1'.format(name))
            log_conv_kernel('{}/conv1b'.format(name))
            tf.summary.image('pool1', pool1[:, :, :, 0:1])

        incep2 = inception_block(pool1,
                                 t1x1=8,
                                 t3x3=8,
                                 t5x5=8,
                                 tmp=8,
                                 name='incep2')

        conv3 = tf.layers.conv2d(incep2,
                                 filters=32,
                                 kernel_size=3,
                                 padding='same',
                                 activation=tf.nn.relu,
                                 name='conv3')
        conv3b = tf.layers.conv2d(conv3,
                                  filters=32,
                                  kernel_size=3,
                                  activation=tf.nn.relu,
                                  name='conv3b')
        pool3 = tf.layers.max_pooling2d(conv3b,
                                        pool_size=[2, 2],
                                        strides=2,
                                        name='pool3')
        if params['verbose_summary']:
            log_conv_kernel('{}/conv3'.format(name))
            log_conv_kernel('{}/conv3b'.format(name))
            tf.summary.image('pool3', pool3[:, :, :, 0:1])

        conv5 = tf.layers.conv2d(pool3,
                                 filters=64,
                                 kernel_size=3,
                                 padding='same',
                                 activation=tf.nn.relu,
                                 name='conv5')
        conv5b = tf.layers.conv2d(conv5,
                                  filters=64,
                                  kernel_size=3,
                                  activation=tf.nn.relu,
                                  name='conv5b')
        pool5 = tf.layers.max_pooling2d(conv5b,
                                        pool_size=[2, 2],
                                        strides=2,
                                        name='pool5')
        if params['verbose_summary']:
            log_conv_kernel('{}/conv5'.format(name))
            log_conv_kernel('{}/conv5b'.format(name))
            tf.summary.image('pool5', pool5[:, :, :, 0:1])

        incep6 = inception_block(pool5,
                                 t1x1=32,
                                 t3x3=32,
                                 t5x5=32,
                                 tmp=32,
                                 name='incep6')

        conv7 = tf.layers.conv2d(incep6,
                                 filters=128,
                                 kernel_size=3,
                                 padding='same',
                                 activation=tf.nn.relu,
                                 name='conv7')
        conv7b = tf.layers.conv2d(conv7,
                                  filters=128,
                                  kernel_size=3,
                                  activation=tf.nn.relu,
                                  name='conv7b')
        pool7 = tf.layers.max_pooling2d(conv7b,
                                        pool_size=[2, 2],
                                        strides=2,
                                        name='pool7')
        if params['verbose_summary']:
            log_conv_kernel('{}/conv7'.format(name))
            log_conv_kernel('{}/conv7b'.format(name))
            tf.summary.image('pool7', pool7[:, :, :, 0:1])

        conv8 = tf.layers.conv2d(pool7,
                                 filters=256,
                                 kernel_size=3,
                                 padding='same',
                                 activation=tf.nn.relu,
                                 name='conv8')
        conv8b = tf.layers.conv2d(conv8,
                                  filters=256,
                                  kernel_size=3,
                                  activation=tf.nn.relu,
                                  name='conv8b')
        pool8 = tf.layers.max_pooling2d(conv8b,
                                        pool_size=[2, 2],
                                        strides=2,
                                        name='pool8')
        if params['verbose_summary']:
            log_conv_kernel('{}/conv8'.format(name))
            log_conv_kernel('{}/conv8b'.format(name))
            tf.summary.image('pool8', pool8[:, :, :, 0:1])

        flat = flatten(pool8)
        dense = tf.layers.dense(flat,
                                units=2048,
                                activation=tf.nn.relu,
                                name='dense')
        dropout = tf.layers.dropout(
            dense,
            rate=params['dropout_rate'],
            training=mode == tf.estimator.ModeKeys.TRAIN,
            name='dropout')

        return dropout
Beispiel #8
0
def model_fn(features, labels, mode, params):
    with tf.variable_scope('x_prep'):
        x = tf.reshape(features, [-1, 16000], name='input_incep108_lg')
        x_norm = tf.layers.batch_normalization(
            x, training=mode == tf.estimator.ModeKeys.TRAIN, name='x_norm')

        spec_pow = get_spectrogram(x_norm, type='power', name='spec_pow')
        spec_mag = get_spectrogram(x_norm, type='magnitude', name='spec_mag')
        spec_mel = get_spectrogram(x_norm, type='mel', name='spec_mel')

        _, h, w, _ = spec_pow.get_shape()
        spec = tf.reshape(tf.stack([spec_pow, spec_mag, spec_mel],
                                   name='stack'), [-1, h, w, 3],
                          name='stack_reshape')

    if params['verbose_summary']:
        tf.summary.audio('input', x_norm, 16000, max_outputs=12)
        tf.summary.image('mag', spec_mag)
        tf.summary.image('pow', spec_pow)
        tf.summary.image('mel', spec_mel)
        tf.summary.image('spec', spec)

    conv1 = tf.layers.conv2d(spec,
                             filters=16,
                             kernel_size=3,
                             padding='same',
                             activation=tf.nn.relu,
                             name='conv1')
    conv1b = tf.layers.conv2d(conv1,
                              filters=16,
                              kernel_size=3,
                              activation=tf.nn.relu,
                              name='conv1b')
    conv1c = tf.layers.conv2d(conv1b,
                              filters=16,
                              kernel_size=3,
                              activation=tf.nn.relu,
                              name='conv1c')
    pool1 = tf.layers.max_pooling2d(conv1c,
                                    pool_size=[2, 2],
                                    strides=2,
                                    name='pool1')
    if params['verbose_summary']:
        log_conv_kernel('conv1')
        log_conv_kernel('conv1b')
        log_conv_kernel('conv1c')
        tf.summary.image('pool1', pool1[:, :, :, 0:1])

    incep2 = inception_block(pool1,
                             t1x1=8,
                             t3x3=8,
                             t5x5=8,
                             tmp=8,
                             name='incep2')

    conv3 = tf.layers.conv2d(incep2,
                             filters=32,
                             kernel_size=3,
                             padding='same',
                             activation=tf.nn.relu,
                             name='conv3')
    conv3b = tf.layers.conv2d(conv3,
                              filters=32,
                              kernel_size=3,
                              activation=tf.nn.relu,
                              name='conv3b')
    conv3c = tf.layers.conv2d(conv3b,
                              filters=32,
                              kernel_size=3,
                              activation=tf.nn.relu,
                              name='conv3c')
    pool3 = tf.layers.max_pooling2d(conv3c,
                                    pool_size=[2, 2],
                                    strides=2,
                                    name='pool3')
    if params['verbose_summary']:
        log_conv_kernel('conv3')
        log_conv_kernel('conv3b')
        log_conv_kernel('conv3c')
        tf.summary.image('pool3', pool3[:, :, :, 0:1])

    conv5 = tf.layers.conv2d(pool3,
                             filters=64,
                             kernel_size=3,
                             padding='same',
                             activation=tf.nn.relu,
                             name='conv5')
    conv5b = tf.layers.conv2d(conv5,
                              filters=64,
                              kernel_size=3,
                              activation=tf.nn.relu,
                              name='conv5b')
    conv5c = tf.layers.conv2d(conv5b,
                              filters=64,
                              kernel_size=3,
                              activation=tf.nn.relu,
                              name='conv5c')
    pool5 = tf.layers.max_pooling2d(conv5c,
                                    pool_size=[2, 2],
                                    strides=2,
                                    name='pool5')
    if params['verbose_summary']:
        log_conv_kernel('conv5')
        log_conv_kernel('conv5b')
        log_conv_kernel('conv5c')
        tf.summary.image('pool5', pool5[:, :, :, 0:1])

    incep6 = inception_block(pool5,
                             t1x1=32,
                             t3x3=32,
                             t5x5=32,
                             tmp=32,
                             name='incep6')

    conv7 = tf.layers.conv2d(incep6,
                             filters=128,
                             kernel_size=3,
                             padding='same',
                             activation=tf.nn.relu,
                             name='conv7')
    conv7b = tf.layers.conv2d(conv7,
                              filters=128,
                              kernel_size=3,
                              activation=tf.nn.relu,
                              name='conv7b')
    pool7 = tf.layers.max_pooling2d(conv7b,
                                    pool_size=[2, 2],
                                    strides=2,
                                    name='pool7')
    if params['verbose_summary']:
        log_conv_kernel('conv7')
        log_conv_kernel('conv7b')
        tf.summary.image('pool7', pool7[:, :, :, 0:1])

    conv8 = tf.layers.conv2d(pool7,
                             filters=256,
                             kernel_size=3,
                             padding='same',
                             activation=tf.nn.relu,
                             name='conv8')
    conv8b = tf.layers.conv2d(conv8,
                              filters=256,
                              kernel_size=3,
                              activation=tf.nn.relu,
                              name='conv8b')
    conv8c = tf.layers.conv2d(conv8b,
                              filters=256,
                              kernel_size=3,
                              activation=tf.nn.relu,
                              name='conv8c')
    if params['verbose_summary']:
        log_conv_kernel('conv8')
        log_conv_kernel('conv8b')
        log_conv_kernel('conv8c')

    incep9 = inception_block(conv8c,
                             t1x1=64,
                             t3x3=64,
                             t5x5=64,
                             tmp=64,
                             name='incep9')

    conv10 = tf.layers.conv2d(incep9,
                              filters=512,
                              kernel_size=3,
                              activation=tf.nn.relu,
                              name='conv10')
    pool10 = tf.layers.max_pooling2d(conv10,
                                     pool_size=[2, 2],
                                     strides=2,
                                     name='pool10')
    if params['verbose_summary']:
        log_conv_kernel('conv10')
        tf.summary.image('pool8', pool10[:, :, :, 0:1])

    flat = flatten(pool10)
    dense4 = tf.layers.dense(flat,
                             units=2048,
                             activation=tf.nn.relu,
                             name='dense4')
    dropout4 = tf.layers.dropout(dense4,
                                 rate=params['dropout_rate'],
                                 training=mode == tf.estimator.ModeKeys.TRAIN,
                                 name='dropout4')

    logits = tf.layers.dense(dropout4,
                             units=params['num_classes'],
                             name='logits')

    predictions = {
        'classes': tf.argmax(logits, axis=1, name='prediction_classes'),
        'probabilities': tf.nn.softmax(logits, name='prediction_softmax')
    }

    if mode == tf.estimator.ModeKeys.PREDICT:
        return tf.estimator.EstimatorSpec(
            mode=mode,
            predictions={'predictions': predictions['probabilities']})

    onehot_labels = tf.one_hot(indices=tf.cast(labels, tf.int32),
                               depth=params['num_classes'],
                               name='onehot_labels')
    loss = tf.losses.softmax_cross_entropy(onehot_labels=onehot_labels,
                                           logits=logits)
    tf.summary.scalar('loss', loss)

    optimizer = tf.train.GradientDescentOptimizer(
        learning_rate=params['learning_rate'])
    update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
    with tf.control_dependencies(update_ops):
        train_op = optimizer.minimize(loss=loss,
                                      global_step=tf.train.get_global_step())
    eval_metric_ops = {
        'accuracy':
        tf.metrics.accuracy(labels=labels, predictions=predictions['classes'])
    }

    tf.summary.scalar('accuracy', eval_metric_ops['accuracy'][1])

    return tf.estimator.EstimatorSpec(mode=mode,
                                      loss=loss,
                                      train_op=train_op,
                                      eval_metric_ops=eval_metric_ops)