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 )
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 )
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)
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)
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)
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
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)