W moim modelu zamierzałem wyciągnąć matrycę zamieszania i użyłem koncepcji transferu na podstawie modelu uczenia się.

kodu matrycy zamieszania

def plot_confusion_matrix(cm, classes, normalize=False,title='Confusion Matrix', cmap=plt.cm.Blues):
  plt.imshow(cm, interpolation='nearest', cmap=cmap)
  plt.title(title)
  plt.colorbar()
  tick_marks = np.arange(len(classes))
  plt.xticks(tick_marks, classes, rotation=45)
  plt.yticks(tick_marks, classes)

  if normalize:
    cm=cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
    print("Normalized Confusion Matrix")
  else:
    print("Confusion matrix, without normalization")
  print(cm)

  thresh = cm.max() / 2
  for i, j in itertools.product(range(cm.shape[0]),range(cm.shape[1])):
    plt.text(j, i, cm[i, j],
             horizontalalignment="center",
             color="white" if cm[i,j] > thresh else "black")
  plt.tight_layout()
  plt.ylabel('True Label')
  plt.xlabel('Predicted Label')

Teraz poniżej kształtu test_labels i przewidywania ,

test_labels.shape
(12,)
predictions.shape
(10,2)

Powyższy kod jest doskonale działający, ale widziałem błąd poniżej. Więc zadawaj poniższy kod,

cm = confusion_matrix(test_labels, predictions.argmax(axis=1))

, a oto błąd,

ValueError                                Traceback (most recent call last)
<ipython-input-40-79fd4e2e074c> in <module>()
----> 1 cm = confusion_matrix(test_labels, predictions.argmax(axis=1))

2 frames
/usr/local/lib/python3.6/dist-packages/sklearn/utils/validation.py in check_consistent_length(*arrays)
    210     if len(uniques) > 1:
    211         raise ValueError("Found input variables with inconsistent numbers of"
--> 212                          " samples: %r" % [int(l) for l in lengths])
    213 
    214 

ValueError: Found input variables with inconsistent numbers of samples: [12, 10]
  

Uwaga: Jest to błąd wartości i jestem zdezorientowany, staram się coraz więcej, ale zawiodłem. Potrzebuję więc pomocy, aby rozwiązać ten błąd.

0
Imdadul Haque 18 październik 2020, 13:43

1 odpowiedź

Najlepsza odpowiedź

Jak sugeruje błąd, masz różne rozmiary próbek dla test_labels i predictions. Może się to zdarzyć, gdy używasz partii do przewidywania, co może spowodować spadnięcie ostatnich kilku próbek.

Jedna możliwość jest, możesz użyć:

cm = confusion_matrix(test_labels[:-2], predictions.argmax(axis=1))

Może to rozwiązać problem niedopasowania kształtu (ale opiera się na założeniu, że brakuje dwóch ostatnich próbek).

Mogę być w stanie zapewnić bardziej przydatną odpowiedź, jeśli możesz udostępnić kod używany do przewidywania.

1
DrSpill 18 październik 2020, 11:16