Multilabel Text Klassifizierung mit TensorFlow

Den text-Daten ist organisiert als Vektor mit 20.000 Elementen, wie [2, 1, 0, 0, 5, ...., 0].
i-te element gibt die Häufigkeit der i-te Wort in einem text.

Den ground truth Daten für die Etikettierung ist auch dargestellt als Vektor mit 4.000 Elemente, wie [0, 0, 1, 0, 1, ...., 0].
i-te element gibt an, ob der i-te label ist eine positive Bezeichnung für einen text.
Die Anzahl der Etiketten, die für ein text unterscheidet sich je auf die Texte.

Ich habe einen code für single-label text classification.

Wie kann ich die Bearbeiten Sie den folgenden code für multilabel-text-Klassifikation?

Besonders, ich würde gerne wissen, folgenden Punkte.

  • Wie die Berechnung der Genauigkeit mit TensorFlow.
  • Wie eine Schwelle setzen, die Richter, ob ein label positiv oder negativ ist. Zum Beispiel, wenn der Ausgang [0.80, 0.43, 0.21, 0.01, 0.32] und der Boden der Wahrheit ist [1, 1, 0, 0, 1], die Etiketten mit Werten über 0,25 beurteilt werden soll, als positiv.

Danke.

import tensorflow as tf

# hidden Layer
class HiddenLayer(object):
    def __init__(self, input, n_in, n_out):
        self.input = input

        w_h = tf.Variable(tf.random_normal([n_in, n_out],mean = 0.0,stddev = 0.05))
        b_h = tf.Variable(tf.zeros([n_out]))

        self.w = w_h
        self.b = b_h
        self.params = [self.w, self.b]

    def output(self):
        linarg = tf.matmul(self.input, self.w) + self.b
        self.output = tf.nn.relu(linarg)

        return self.output

# output Layer
class OutputLayer(object):
    def __init__(self, input, n_in, n_out):
        self.input = input

        w_o = tf.Variable(tf.random_normal([n_in, n_out], mean = 0.0, stddev = 0.05))
        b_o = tf.Variable(tf.zeros([n_out]))

        self.w = w_o
        self.b = b_o
        self.params = [self.w, self.b]

    def output(self):
        linarg = tf.matmul(self.input, self.w) + self.b
        self.output = tf.nn.relu(linarg)

        return self.output

# model
def model():
    h_layer = HiddenLayer(input = x, n_in = 20000, n_out = 1000)
    o_layer = OutputLayer(input = h_layer.output(), n_in = 1000, n_out = 4000)

    # loss function
    out = o_layer.output()
    cross_entropy = -tf.reduce_sum(y_*tf.log(out + 1e-9), name='xentropy')    

    # regularization
    l2 = (tf.nn.l2_loss(h_layer.w) + tf.nn.l2_loss(o_layer.w))
    lambda_2 = 0.01

    # compute loss
    loss = cross_entropy + lambda_2 * l2

    # compute accuracy for single label classification task
    correct_pred = tf.equal(tf.argmax(out, 1), tf.argmax(y, 1))
    accuracy = tf.reduce_mean(tf.cast(correct_pred, "float"))

    return loss, accuracy

InformationsquelleAutor der Frage Benben | 2016-02-15

Schreibe einen Kommentar