Попытка визуализировать результаты Topk для любого изображения в задаче классификации изображений. Код читает тензорное значение изображения вместо имени класса - PullRequest
0 голосов
/ 09 марта 2020

Я хочу дать моей функции изображение из моего набора данных, чтобы оно выводило имя класса и процент достоверности при его прогнозировании. Я не могу заставить его напечатать имена классов для предсказанного класса. Это выглядит так:

enter image description here

Вот мой код:

def check_topk(path):

  image = process_image(path)
  names = np.array([class_to_idx[i] for i in classes])
  print(names)

  plot = imshow(image, ax = plt)
  plot.axis('off')
  plot.title(path.split('/')[2])
  plot.show()

  axes = predict(path, model)
  print(axes)

  yaxis = names[0:5]
  y_pos = np.arange(len(yaxis))
  xaxis = np.array(axes[0][0].cpu().numpy())   

  plt.barh(y_pos, xaxis)
  plt.xlabel('probability')
  plt.yticks(y_pos, names)

  plt.show()

Я знаю от 0 до 4 по оси Y из-за имени [0: 5], но это единственный способ заставить его распечатать график, поэтому я сохранил его пока.

Вот код class_to_idx и его вывод, который помечает изображения как их класс:

classes = os.listdir(train_folder)
classes.sort()
#print(classes)
label_mapping = {k: v for v, k in enumerate(classes)}

class_to_idx = {classes[i]: i for i in range(len(classes))}
print(class_to_idx)

{'apple_pie': 0, 'baby_back_ribs': 1, 'baklava': 2, 'beef_carpaccio': 3, 'beef_tartare': 4, 'beet_salad': 5, 'beignets': 6, 'bibimbap': 7, 'bread_pudding': 8, 'breakfast_burrito': 9, .... .... 
...