Pytorchs DataLoader Es ist schön, sehr einfach zu bedienen zu sein. Ich persönlich dachte, dass es einfacher zu analysieren wäre, wenn ich den Dateinamen sehen könnte, der bei einem Klassifizierungsproblem nicht klassifiziert werden konnte. Daher werde ich beschreiben, wie der Dateiname als Memorandum abgerufen wird.
Es ist überhaupt nicht schwierig, aber es wird direkt vom Dataloader übernommen. Erstellen Sie Datenlader unter TRANSFER LEARNING FOR COMPUTER VISION STRUCT [1] von PyTorch.
IMAGE_SIZE=224
BATCH_SIZE=20
TRAIN = 'train'
VAL = 'val'
DATA_DIR = 'H:\\dataset/predata/' # select your dataset directory
DEVICE = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
data_transforms = {
TRAIN: transforms.Compose([
transforms.Resize(IMAGE_SIZE),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
VAL: transforms.Compose([
transforms.Resize(IMAGE_SIZE),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
}
image_datasets = {x: datasets.ImageFolder(os.path.join(DATA_DIR, x), data_transforms[x]) for x in [TRAIN, VAL]}
dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x],
batch_size=BATCH_SIZE, shuffle=True, num_workers=4) for x in [TRAIN, VAL]}
dataset_sizes = {x: len(image_datasets[x]) for x in [TRAIN, VAL]}
class_names = image_datasets[TRAIN].classes
Extrahieren Sie den Datenpfad aus den erstellten Datenladern.
from enum import Enum
class Dataset(Enum):
FILE_PATH = 0
LABEL = 1
# full dataset
for j in range(dataset_sizes[VAL]):
# abs path
print(dataloaders[VAL].dataset.imgs[j][Dataset.FILE_PATH.value])
# file name only
print(os.path.basename(dataloaders[VAL].dataset.imgs[j][Dataset.FILE_PATH.value]))
# there is one dataset
print(dataloaders[VAL].dataset.imgs[0][Dataset.FILE_PATH.value])
Immerhin ist es schmerzhaft, weil Sie die klassifizierten Daten direkt betrachten müssen, wenn es keinen Dateinamen gibt. Warum also nicht nach übereinstimmenden Dateinamen suchen?
Recommended Posts