2

分類器のクラスの再現率と精度の値を取得する簡単な解決策があるかどうか疑問に思っていましたか?

状況を説明するために、Denny Britz コード ( https://github.com/dennybritz/cnn-text-classification-tf ) の助けを借りて、Tensorflow を使用して 20 クラスの CNN 分類子を実装しました。

text_cnn.py の最後でわかるように、彼はグローバル精度を計算する単純な関数を実装しています。

# Accuracy
        with tf.name_scope("accuracy"):
            correct_predictions = tf.equal(self.predictions, tf.argmax(self.input_y, 1))
            self.accuracy = tf.reduce_mean(tf.cast(correct_predictions, "float"), name="accuracy")

さまざまなカテゴリの再現率と精度の値を取得するために同様のことを行う方法についてのアイデアはありますか?

私の質問はばかげているように聞こえるかもしれませんが、正直に言うと、これで少し迷っています。助けてくれてありがとう。

4

1 に答える 1

3

tf.metrics を使用すると、うまくいきました。

#define the method
x = tf.placeholder(tf.int32, )
y = tf.placeholder(tf.int32, )
acc, acc_op = tf.metrics.accuracy(labels=x, predictions=y)
rec, rec_op = tf.metrics.recall(labels=x, predictions=y)
pre, pre_op = tf.metrics.precision(labels=x, predictions=y)

#predict the class using your classifier
scorednn = list(DNNClassifier.predict_classes(input_fn=lambda: input_fn(testing_set)))
scoreArr = np.array(scorednn).astype(int)

#run the session to compare the label with the prediction
sess=tf.Session()
sess.run(tf.global_variables_initializer())
sess.run(tf.local_variables_initializer())
v = sess.run(acc_op, feed_dict={x: testing_set["target"],y: scoreArr}) #accuracy
r = sess.run(rec_op, feed_dict={x: testing_set["target"],y: scoreArr}) #recall
p = sess.run(pre_op, feed_dict={x: testing_set["target"],y: scoreArr}) #precision

print("accuracy %f", v)
print("recall %f", r)
print("precision %f", p)

結果 :

accuracy %f 0.686667
recall %f 0.978723
precision %f 0.824373

注:精度のために私は使用します:

accuracy_score = DNNClassifier.evaluate(input_fn=lambda:input_fn(testing_set),steps=1)["accuracy"]

それはより簡単で、すでに評価で計算されているためです。

累積結果が必要ない場合は、variables_initializer も呼び出します。

于 2017-07-04T15:35:29.867 に答える