Torchvision.transforms реализация Flatten()

У меня есть изображения в градациях серого, но мне нужно преобразовать их в набор данных 1d-векторов. Как мне это сделать? Я не смог найти подходящий метод в преобразованиях:

train_dataset = torchvision.datasets.ImageFolder(root='./data',train=True, transform=transforms.ToTensor())
test_dataset = torchvision.datasets.ImageFolder(root='./data',train=False, transform=transforms.ToTensor())

train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=4, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=4, shuffle=False)

person ComboSmash    schedule 28.03.2020    source источник
comment
Вы имеете в виду flatten?   -  person Berriel    schedule 28.03.2020
comment
@ Берриэль Да. Как я могу это сделать?   -  person ComboSmash    schedule 28.03.2020
comment
Отвечает ли это на ваш вопрос? Как сгладить тензор в pytorch?   -  person Dishin H Goyani    schedule 28.03.2020
comment
@Berriel Спасибо, но не совсем. transforms.ToTensor возвращает Tensor, но я не могу написать в функции ImageFolder «transform = torch.flatten (transforms.ToTensor())», и это «transform = transforms.LinearTransformation (transforms.ToTensor ()), torch.zeros (1,784) )' Может быть, это решено с помощью transforms.Compose, но я не знаю, как   -  person ComboSmash    schedule 28.03.2020
comment
Проверьте мой ответ. Вы использовали torch.flatten неправильным образом. Вы должны использовать Compose, и я использовал его в своем ответе.   -  person Berriel    schedule 28.03.2020


Ответы (1)


Вот как это можно сделать с помощью Lambda

import torch
from torchvision.datasets import MNIST
import torchvision.transforms as T

# without flatten
dataset = MNIST(root='.', download=True, transform=T.ToTensor())
print(dataset[0][0].shape)
# >>> torch.Size([1, 28, 28])

# with flatten (using Lambda, but you can do it in many other ways)
dataset_flatten = MNIST(root='.', download=True, transform=T.Compose([T.ToTensor(), T.Lambda(lambda x: torch.flatten(x))]))
print(dataset_flatten[0][0].shape)
# >>> torch.Size([784])
person Berriel    schedule 28.03.2020
comment
Это хорошая практика, чтобы сделать эту операцию в разделе преобразования? - person Opsse; 11.01.2021
comment
@Opsse Я бы не сказал, что это хорошая практика, но я бы предпочел считать эту операцию частью моего конвейера обработки данных, а не моей модели; поэтому я бы использовал его там. - person Berriel; 11.01.2021