Я пытаюсь добавить transforms.FiveCrop в свою модель. Я понимаю, что этот метод увеличения данных добавляет измерения к моему тензору, но я не уверен, как с этим справиться. Примечания к документации:
Это преобразование возвращает кортеж изображений, и может быть несоответствие в количестве входных данных и целевых объектов, возвращаемых вашим набором данных. См. Ниже пример того, как с этим справиться.
Пример
>>> transform = Compose([
>>> FiveCrop(size), # this is a list of PIL Images
>>> Lambda(lambda crops: torch.stack([ToTensor()(crop) for crop in crops])) # returns a 4D tensor
>>> ])
>>> #In your test loop you can do the following:
>>> input, target = batch # input is a 5d tensor, target is 2d
>>> bs, ncrops, c, h, w = input.size()
>>> result = model(input.view(-1, c, h, w)) # fuse batch size and ncrops
>>> result_avg = result.view(bs, ncrops, -1).mean(1) # avg over crops
... Но я не уверен, как это реализовать.
Поезд l oop:
for batch_idx, (data, target) in enumerate(train_loader):
print(f'Data: {data.shape}, Target: {target.shape}')
# Before Fivecrop: Data: torch.Size([32, 3, 224, 224]), Target: torch.Size([32])
# After Fivecrop: Data: torch.Size([32, 5, 3, 224, 224]), Target: torch.Size([32])
indx_target = target.clone()
data = data.to(train_config.device)
target = target.to(train_config.device)
optimizer.zero_grad()
output = model(data)
loss = F.cross_entropy(output, target)
loss.backward()
optimizer.step()
Может кто-нибудь помочь объяснить, как это реализовано в моем поезде l oop и что я не понимаю?
Спасибо