как изменить набор данных для обучения

#python #pytorch

Вопрос:

У меня есть занятие:

 class ToTensor(object):
"""Convert ndarrays in sample to Tensors."""

def __call__(self, sample):
    image, label = sample['image'], sample['label']

    # swap color axis because
    # numpy image: H x W x C
    # torch image: C x H x W
    image = image.transpose((2, 0, 1))
    #image = image.to(torch.float32)
    
    return {'image': torch.from_numpy(image),
            'label': torch.as_tensor(np.array(label).astype('float'))}
 

который выдает данные в виде двух диктов с тензорами:

  • один тензор с изображением (функциями);
  • другой с надписями (цель).

введите описание изображения здесь

Этот формат не принимается моделью ( resnet18 ), когда я пытаюсь тренироваться, потому что ожидаемый формат-это список списков, как показано на рисунке ниже:

введите описание изображения здесь

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

 trainlist = []
for i in trans_train_dataset:
    sample = i['image'], i['label']
    trainlist.append(sample)
 

но это очень медленно (занимает 1 час после того, как я настроил память). Другой вариант, о котором я думал, — сохранить набор данных после преобразования (используя приведенный ниже код), но он слишком велик для pickle, и когда я позже сделаю это в формате txt, я получу фрейм данных с кортежами, которые мне нужно снова преобразовать в факел, что также не является хорошим решением.

 import csv

with open("trainlist4.csv", "w") as f:
    wr = csv.writer(f)
    wr.writerows(trainlist)
 

Итак, есть ли какой-нибудь быстрый способ преобразовать набор данных для чтения моей моделью? Или, в качестве альтернативы, как сохранить набор данных и загрузить его в удобочитаемом формате с помощью модели.

Комментарии:

1. Почему бы вам просто не изменить возврат ToTensor ?

2. Привет, если я это сделаю: trainlist =torch.as_tensor(np.массив(trainlist).astype(‘float’)) я получаю ошибку значения: не удалось преобразовать строку в float: ‘тензор([[[0.1451, 0.1451, 0.1451,…

3. Я сказал «изменить возврат ToTensor «, вашего класса. Чтобы вернуть кортеж вместо диктанта.