Tensorflow, много меток путаница - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь выяснить, как создать матрицу путаницы для задачи классификации с несколькими метками с использованием нейронных сетей.Раньше мне удавалось рассчитывать точность с помощью функции «пересечение», поскольку для этого мне было наплевать на порядок.

intersection = tf.sets.set_intersection(predictions, labels)

Однако, чтобы вычислить матрицу потребления, я забочусь о порядке индексации прогнозов / меток.А поскольку метки всегда имеют одинаковое значение (1,1; или 0,5,0,5), невозможна сортировка по большему / меньшему значению.

Интересно:

1) Можно ли рассчитать матрицу путаницы для задачи классификации с несколькими метками?

2)Как это будет реализовано?

3) Как вы можете справиться со случаем неудачи в предсказании обеих меток?Поскольку невозможно определить, какая путаница принадлежит какому предсказанию.

4) Какова логика сортировки функции tf.nn.top_k ()

Ниже я показываю пример кода, который я пытался использовать.

import numpy as np
import tensorflow as tf
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix

Z = np.array([[7.0, 3.0, 5.0, 1.0, 0.0, 6.0],[2.0, 3.0, 4.0, 1.0, 3.25, 2.2], [2.0 , 5.0, 1.0, 7.0, 0.0, 8.0]])
Y = np.array([[0.5, 0, 0, 0.0, 0, 0.5],[0, 0.0, 0.5, 0, 0.5, 0], [0,0,0,0.5,0,0.5]])

_, predicted_softmax = tf.nn.top_k(tf.nn.softmax(Z), k = 2, sorted = False)
_ , labels = tf.nn.top_k(Y, k = 2, sorted = False)

with tf.Session() as sess:
    # reshape to (6,1) because there is 2 correct values per sample(2*3)
    print(predicted_softmax.eval().reshape(6,1))
    print(labels.eval().reshape(6,1))
    predicted = predicted_softmax.eval().reshape(6,1)
    labels_idx = labels.eval().reshape(6,1)

class_labels = np.arange(6)
cnf_matrix_train = confusion_matrix(labels_idx, predicted, labels = class_labels)

print(cnf_matrix_train)

Я не совсем понимаю, почему вывод предиката _softmax:

[[5] [0] [4] [2] [3] [5]] , 

Я ожидал [5] [3] для двух последних членов.В этом выводе нет никакой логики.В документации они не указывают ничего о порядке в том случае, если sorted = False подумал, но я ожидал некоторого последовательного поведения.

Спасибо за любую помощь!

...