テキストデータは、[2,1,0,0,5、...、0]のように20,000要素のベクトルとして編成されます。 i番目の要素は、テキスト中のi番目の単語の頻度を示します。TensorFlowを使用したマルチラベルテキスト分類
グラウンドトゥルースラベルデータは、[0,0,1,0,1、...、0]のように4,000要素のベクトルとしても表されます。 i番目の要素は、i番目のラベルがテキストの正のラベルかどうかを示します。 テキストのラベル数は、テキストによって異なります。
私は単一ラベルテキスト分類のコードを持っています。
マルチラベルテキスト分類のために次のコードを編集するにはどうすればよいですか?
特に、私は以下の点を知りたいと思います。
- TensorFlowを使用して精度を計算する方法。
- ラベルが正か負かを判断するしきい値を設定する方法。例えば、出力が[0.80,0.43,0.21,0.01、0.32]であり、地上真理値が[1,1,0,0,1]である場合、0.25を超えるスコアを有するラベルは、正と判定されるべきである。
ありがとうございます。
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
(明示的な損失がtensorflowの私の場合/バージョンで働いていた)シグモイドクロスエントロピー損失の明示的な数式にクロスエントロピー損失を変更します。 – Aaron
マルチラベル分類の問題には、1誤差精度、ランクロス、平均平均精度など、さまざまな精度指標があります。私はまだTensorFlowを自分自身で学習しており、まだそれらのどれかを正しく実装することはできませんでした。しかし、おそらくこのペーパーはあなたを助けるでしょう:http://arxiv.org/pdf/1312.5419v3.pdfあなたが進歩をするかどうか教えてください! –
正確さのより良い考え方のために、精度とリコールの計算を検討してください。 –