#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
«, вашего класса. Чтобы вернуть кортеж вместо диктанта.