comment créer de la confusion de la matrice de classification tensorflow
J'ai CNN modèle qui dispose de 4 nœuds de sortie, et je suis en train de calculer la matrice de confusion, de sorte que je peux savoir de l'individu à la classe de précision. Je suis en mesure de calculer la précision globale.
Dans le lien ici, Igor Valantic a donné une fonction qui peut calculer la matrice de confusion variables.
il me donne une erreur à la correct_prediction = tf.nn.in_top_k(logits, labels, 1, name="correct_answers")
et l'erreur est TypeError: DataType float32 for attr 'T' not in list of allowed values: int32, int64
J'ai essayé typecasting logits int32 à l'intérieur de la fonction mentionné def evaluation(logits, labels)
, il donne une autre erreur de calcul correct_prediction = ...
comme TypeError:Input 'predictions' of 'InTopK' Op has type int32 that does not match expected type of float32
comment calculer cette matrice de confusion ?
sess = tf.Session()
model = dimensions() # CNN input weights are calculated
data_train, data_test, label_train, label_test = load_data(files_test2,folder)
data_train, data_test, = reshapedata(data_train, data_test, model)
# input output placeholders
x = tf.placeholder(tf.float32, [model.BATCH_SIZE, model.input_width,model.input_height,model.input_depth]) # last column = 1
y_ = tf.placeholder(tf.float32, [model.BATCH_SIZE, model.No_Classes])
p_keep_conv = tf.placeholder("float")
#
y = mycnn(x,model, p_keep_conv)
# loss
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(y, y_))
# train step
train_step = tf.train.AdamOptimizer(1e-3).minimize(cost)
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
true_positives, false_positives, true_negatives, false_negatives = evaluation(y,y_)
lossfun = np.zeros(STEPS)
sess.run(tf.global_variables_initializer())
for i in range(STEPS):
image_batch, label_batch = batchdata(data_train, label_train, model.BATCH_SIZE)
epoch_loss = 0
for j in range(model.BATCH_SIZE):
sess.run(train_step, feed_dict={x: image_batch, y_: label_batch, p_keep_conv:1.0})
c = sess.run( cost, feed_dict={x: image_batch, y_: label_batch, p_keep_conv: 1.0})
epoch_loss += c
lossfun[i] = epoch_loss
print('Epoch',i,'completed out of',STEPS,'loss:',epoch_loss )
TP,FP,TN,FN = sess.run([true_positives, false_positives, true_negatives, false_negatives], feed_dict={x: image_batch, y_: label_batch, p_keep_conv:1.0})
c'est mon extrait de code
- Je sais que ce n'est pas la réponse que vous cherchez, puisque ce n'est pas tensorflow, mais sklearn a une fonction pour cela. scikit-learn.org/stable/modules/generated/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement utiliser Tensorflow de matrice de confusion. Je suppose
y
sont vos prédictions, et il vous peut ou peut ne pas avoirnum_classes
(qui est facultatif)Si vous
print(confusion)
, vous obtenezSi
print(confusion)
n'est pas l'impression que la confusion de la matrice, puis utilisezprint(confusion.eval(session=sess))
. Icisess
est le nom de votre TensorFlow session.import tensorflow as tf y_ = [1, 2, 4] y = [2, 2, 4] num_classes = 3 cm = tf.confusion_matrix(labels=y_, predictions=y, num_classes=num_classes) print(cm)
imprimeTensor("confusion_matrix_5/SparseTensorDenseAdd:0", shape=(3, 3), dtype=int32)
.sess = tf.Session() with sess.as_default(): print(cm.eval())
pour l'imprimer correctement.La sortie est :