コード例 #1
0
def padded_accuracy(predictions,
                    labels,
                    weights_fn=common_layers.weights_nonzero):
    """Percentage of times that predictions matches labels on non-0s."""
    with tf.variable_scope("padded_accuracy", values=[predictions, labels]):
        padded_predictions, padded_labels = common_layers.pad_with_zeros(
            predictions, labels)
        weights = weights_fn(padded_labels)
        outputs = tf.to_int32(tf.argmax(padded_predictions, axis=-1))
        padded_labels = tf.to_int32(padded_labels)
        return tf.to_float(tf.equal(outputs, padded_labels)), weights
コード例 #2
0
def padded_log_poisson(predictions,
                       labels,
                       weights_fn=common_layers.weights_all):
    # Expects predictions to already be transformed into log space
    predictions, labels = common_layers.pad_with_zeros(predictions, labels)
    targets = labels
    weights = weights_fn(targets)

    lp_loss = tf.nn.log_poisson_loss(targets,
                                     predictions,
                                     compute_full_loss=True)
    return tf.reduce_sum(lp_loss * weights), tf.reduce_sum(weights)
コード例 #3
0
def padded_variance_explained(predictions,
                              labels,
                              weights_fn=common_layers.weights_all):
    # aka R^2
    predictions, labels = common_layers.pad_with_zeros(predictions, labels)
    targets = labels
    weights = weights_fn(targets)

    y_bar = tf.reduce_mean(weights * targets)
    tot_ss = tf.reduce_sum(weights * tf.pow(targets - y_bar, 2))
    res_ss = tf.reduce_sum(weights * tf.pow(targets - predictions, 2))
    r2 = 1. - res_ss / tot_ss
    return r2, tf.reduce_sum(weights)
コード例 #4
0
def padded_sequence_accuracy(predictions,
                             labels,
                             weights_fn=common_layers.weights_nonzero):
    """Percentage of times that predictions matches labels everywhere (non-0)."""
    with tf.variable_scope("padded_sequence_accuracy",
                           values=[predictions, labels]):
        padded_predictions, padded_labels = common_layers.pad_with_zeros(
            predictions, labels)
        weights = weights_fn(padded_labels)
        outputs = tf.to_int32(tf.argmax(padded_predictions, axis=-1))
        padded_labels = tf.to_int32(padded_labels)
        not_correct = tf.to_float(tf.not_equal(outputs,
                                               padded_labels)) * weights
        axis = list(range(1, len(outputs.get_shape())))
        correct_seq = 1.0 - tf.minimum(1.0,
                                       tf.reduce_sum(not_correct, axis=axis))
        return correct_seq, tf.constant(1.0)
コード例 #5
0
def padded_accuracy_topk(predictions,
                         labels,
                         k,
                         weights_fn=common_layers.weights_nonzero):
    """Percentage of times that top-k predictions matches labels on non-0s."""
    with tf.variable_scope("padded_accuracy_topk",
                           values=[predictions, labels]):
        padded_predictions, padded_labels = common_layers.pad_with_zeros(
            predictions, labels)
        weights = weights_fn(padded_labels)
        effective_k = tf.minimum(k, tf.shape(padded_predictions)[-1])
        _, outputs = tf.nn.top_k(padded_predictions, k=effective_k)
        outputs = tf.to_int32(outputs)
        padded_labels = tf.to_int32(padded_labels)
        padded_labels = tf.expand_dims(padded_labels, axis=-1)
        padded_labels += tf.zeros_like(outputs)  # Pad to same shape.
        same = tf.to_float(tf.equal(outputs, padded_labels))
        same_topk = tf.reduce_sum(same, axis=-1)
        return same_topk, weights
コード例 #6
0
def padded_rmse(predictions, labels, weights_fn=common_layers.weights_all):
    predictions, labels = common_layers.pad_with_zeros(predictions, labels)
    targets = labels
    weights = weights_fn(targets)
    error = tf.sqrt(tf.pow(predictions - labels, 2))
    return tf.reduce_sum(error * weights), tf.reduce_sum(weights)