0

Я начинаю с общего примера TensorFlow.Добавление нескольких классификаторов softmax к примеру TensorFlow

Чтобы классифицировать мои данные, мне нужно использовать несколько ярлыков (в идеале несколько классификаторов softmax) на последнем уровне, поскольку мои данные содержат несколько независимых меток (сумма вероятностей не равна 1).

В частности, в retrain.py эти строки в add_final_training_ops() добавить окончательный тензор

final_tensor = tf.nn.softmax(logits, name=final_tensor_name) 

и здесь

cross_entropy = tf.nn.softmax_cross_entropy_with_logits(
     logits, ground_truth_input) 

Есть ли уже общий классификатор в TensorFlow? Если нет, как добиться многоуровневой классификации?

add_final_training_ops() из tensorflow/examples/image_retraining/retrain.py:

def add_final_training_ops(class_count, final_tensor_name, bottleneck_tensor): 

    with tf.name_scope('input'): 
    bottleneck_input = tf.placeholder_with_default(
     bottleneck_tensor, shape=[None, BOTTLENECK_TENSOR_SIZE], 
     name='BottleneckInputPlaceholder') 

    ground_truth_input = tf.placeholder(tf.float32, 
             [None, class_count], 
             name='GroundTruthInput') 

    layer_name = 'final_training_ops' 
    with tf.name_scope(layer_name): 
    with tf.name_scope('weights'): 
     layer_weights = tf.Variable(tf.truncated_normal([BOTTLENECK_TENSOR_SIZE, class_count], stddev=0.001), name='final_weights') 
     variable_summaries(layer_weights) 
    with tf.name_scope('biases'): 
     layer_biases = tf.Variable(tf.zeros([class_count]), name='final_biases') 
     variable_summaries(layer_biases) 
    with tf.name_scope('Wx_plus_b'): 
     logits = tf.matmul(bottleneck_input, layer_weights) + layer_biases 
     tf.summary.histogram('pre_activations', logits) 

    final_tensor = tf.nn.softmax(logits, name=final_tensor_name) 
    tf.summary.histogram('activations', final_tensor) 

    with tf.name_scope('cross_entropy'): 
    cross_entropy = tf.nn.softmax_cross_entropy_with_logits(
     logits, ground_truth_input) 
    with tf.name_scope('total'): 
     cross_entropy_mean = tf.reduce_mean(cross_entropy) 
    tf.summary.scalar('cross_entropy', cross_entropy_mean) 

    with tf.name_scope('train'): 
    train_step = tf.train.GradientDescentOptimizer(FLAGS.learning_rate).minimize(
     cross_entropy_mean) 

    return (train_step, cross_entropy_mean, bottleneck_input, ground_truth_input, 
      final_tensor) 

Даже после добавления sigmoid классификатор и переобучения, Tensorboard все еще показывает softmax:

Tensorboard with softmax

ответ

0

TensorFlow имеет tf.nn.sigmoid_cross_entropy_with_logits для независимой, MultiLabel классификации.

+0

По какой-то причине это не работает. Я попробовал переподготовку модели, и они все еще являются «мягкими». Tensorboard также продолжает показывать 'softmax' на графике (см. Снимок экрана) –

Смежные вопросы