#pytorch
#pytorch
Вопрос:
Я обучил модель классифицировать изображение на 2 класса.
Я хочу использовать его для упорядочивания изображений на iPhone, у меня их много. Итак, я переместил обученную модель на свой MacBook и запустил несколько тестов.
Все работает должным образом, пока папка с изображениями содержит не более 223 изображений.
Кажется, это как-то связано с размером набора данных, я могу воспроизвести проблему с помощью следующего кода.
Я пытался разделить изображения на партии, но не мог понять, как это сделать. Каково общее решение этой проблемы? Можно ли использовать загрузчик данных?
test_dataset = ImageFolderWithPaths('/Users/daniel/Gimp/test-ds/test/', test_trans)
# check images
for img, label, data in test_dataset:
print(img.shape, label, data)
data_path = '/Users/daniel/Gimp/test-ds/test/'
data_path = '/Users/daniel/Pictures/Photos1/'
data_file = data.split('/')[-1]
data_file_new = 'class0_' data.split('/')[-1]
print(data_path data_file_new)
Вывод
torch.Size([3, 64, 64]) 0 /Users/daniel/Gimp/test-ds/test/3/020B1786-E77D-47E8-B0F1-DD72313546B7.jpeg
/Users/daniel/Pictures/Photos1/class0_020B1786-E77D-47E8-B0F1-DD72313546B7.jpeg
torch.Size([3, 64, 64]) 0 /Users/daniel/Gimp/test-ds/test/3/020BC6D0-2AC0-4BF3-A540-6630BA7200ED.jpeg
/Users/daniel/Pictures/Photos1/class0_020BC6D0-2AC0-4BF3-A540-6630BA7200ED.jpeg
torch.Size([3, 64, 64]) 0 /Users/daniel/Gimp/test-ds/test/3/021453CC-CAC1-4546-8188-20739F3C778F.jpeg
/Users/daniel/Pictures/Photos1/class0_021453CC-CAC1-4546-8188-20739F3C778F.jpeg
torch.Size([3, 64, 64]) 0 /Users/daniel/Gimp/test-ds/test/3/0235EEF0-2831-46D3-8889-8E57CDF42205.jpeg
/Users/daniel/Pictures/Photos1/class0_0235EEF0-2831-46D3-8889-8E57CDF42205.jpeg
torch.Size([3, 64, 64]) 0 /Users/daniel/Gimp/test-ds/test/3/02398B72-6F73-49D6-843B-25E2A2593DA9.jpeg
/Users/daniel/Pictures/Photos1/class0_02398B72-6F73-49D6-843B-25E2A2593DA9.jpeg
Метод прогнозирования
class pred01():
def __init__(self, imgpath, model):
cc = 0
cc1 = 0
cc0 = 0
cc2 = 0
"""Predict image class"""
self.ds = ImageFolderWithPaths(imgpath, transform=test_trans)
for img, label, data in self.ds:
self.xb = to_device(img.unsqueeze(0), device)
self.yb = model(self.xb)
_, self.preds = torch.max(self.yb, dim=1)
self.preds1 = torch.softmax(self.yb, dim=1).max()
cc = 1
if dataset.classes[self.preds[0].item()] == '0' and self.preds1.item() > 0.80 or self.preds1.item() == 1.00:
#print('normal pic')
cc0 = 1
# pass
elif dataset.classes[self.preds[0].item()] == '1' and self.preds1.item() > 0.80 or self.preds1.item() == 1.00:
#print('class pic, new name: ' 'class1_' data.split('/')[-1])
#os.rename(data, '/Users/daniel/Pictures/Photos1/1/' 'duolingo_' data.split('/')[-1])
cc1 = 1
else:
pass
#print('not sure')
cc2 = 1
print(cc)
print(f'cc0: {cc0}')
print(f'cc1: {cc1}')
print(f'cc2: {cc2}')
Результаты после 3 запусков
365
cc0: 152
cc1: 195
cc2: 18
365
cc0: 154
cc1: 186
cc2: 25
365
cc0: 136
cc1: 206
cc2: 23
Комментарии:
1. Какую именно ошибку вы получаете?
2. Я обнаружил ошибку, открытый временный файл внутри папки с изображением прервал процесс скрипта. После удаления файла он выполняется до конца с более чем 350 пикселями. Одна вещь, которую я замечаю, это то, что вероятность и прогноз отличаются при каждом запуске. Я добавил сценарий проверки с приведенными выше прогнозами. Что я могу сделать, чтобы сделать результат более последовательным?