Мнист: получи путаницу - PullRequest
       6

Мнист: получи путаницу

0 голосов
/ 17 ноября 2018

Я пытаюсь получить запутанную матрицу набора данных mnist.

Это мой код:

mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(512, activation=tf.nn.tanh),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])


model.fit(x_train, y_train, epochs=1, callbacks=[history])

test_predictions = model.predict(x_test)


# Compute confusion matrix
confusion = tf.confusion_matrix(y_test, test_predictions)

Проблема в том, что test_prediction - это матрица 10000 x 10, тогда как y_test -10000 х 1 матрица.Фактически, нейронная сеть не обеспечивает вывод для каждого тестового образца.Как я могу рассчитать матрицу путаницы для таких случаев?

А как тогда представить матрицу путаницы?Могу ли я использовать библиотеку sci-kit для этой цели?

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Если вы используете метод .predict_classes вместо простого прогнозирования, вы получите вектор классов с наибольшей вероятностью.

Затем вы можете использовать confusion_matrix из sklearn.

test_predictions = model.predict_classes(x_test)

from sklearn.metrics import confusion_matrix

cm = confusion_matrix(y_true = y_test, y_pred = test_predictions)
print(cm)

форма test_predictions здесь (10000,).

Напечатанный результат будет примерно таким:

array([[ 967,    1,    1,    2,    0,    1,    5,    0,    2,    1],
   [   0, 1126,    3,    1,    0,    1,    1,    0,    3,    0],
   [   3,    2, 1001,    8,    1,    0,    3,    6,    8,    0],
   [   0,    0,    1, 1002,    0,    1,    0,    1,    5,    0],
   [   3,    1,    2,    2,  955,    2,    6,    1,    3,    7],
   [   3,    1,    0,   37,    1,  833,    9,    0,    6,    2],
   [   4,    3,    1,    1,    1,    3,  941,    0,    4,    0],
   [   2,    9,    8,    5,    0,    0,    0,  988,    8,    8],
   [   3,    1,    3,   10,    3,    2,    2,    3,  946,    1],
   [   3,    8,    0,   10,    8,    8,    1,    4,    5,  962]],
  dtype=int64)
0 голосов
/ 17 ноября 2018

Вероятно, это связано с тем, что ваш прогноз состоит из вероятностей всех возможных классов. Вам нужно выбрать класс с наибольшей вероятностью, что приведет к тому же измерению, что и y_test. Вы можете использовать метод argmax () из numpy. Это работает примерно так:

import numpy as np
a = np.array([[0.9,0.1,0],[0.2,0.3,0.5],[0.4,0.6,0]])
np.argmax(a, axis=0)
array([0, 2, 1])

Вы можете использовать sklearn для генерации путаницы. Ваш код станет примерно таким

from sklearn.metrics import confusion_matrix
import numpy as np

confusion = confusion_matrix(y_test, np.argmax(test_predictions,axis=1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...