Да, это возможно. Просто создайте объекты самостоятельно, например.
import torch.utils.data as data_utils
train = data_utils.TensorDataset(features, targets)
train_loader = data_utils.DataLoader(train, batch_size=50, shuffle=True)
где features
и targets
тензоры. features
должен быть двухмерным, то есть матрицей, где каждая строка представляет один образец обучения, а targets
может быть 1-D или 2-D, в зависимости от того, пытаетесь ли вы предсказать скаляр или вектор.
Надеюсь, что это поможет!
EDIT: ответ на вопрос @ Sarthak в
В основном да. Если вы создаете объект типа TensorData
, то конструктор исследует, имеют ли первые размеры тензора признака (который на самом деле называется data_tensor
) и целевой тензор (так называемый target_tensor
) такой же длины:
assert data_tensor.size(0) == target_tensor.size(0)
Однако, если вы хотите впоследствии пополнить эти данные в нейронную сеть, тогда вам нужно быть осторожным. Хотя уровни свертки работают над такими данными, как ваши, (я думаю), все остальные типы слоев ожидают, что данные будут представлены в матричной форме. Таким образом, если вы столкнулись с такой проблемой, то простым решением было бы преобразовать ваш 4D-набор данных (заданный как какой-то тензор, например FloatTensor
) в матрицу, используя метод view
. Для вашего 5000xnxnx3 набора данных, это будет выглядеть так:
2d_dataset = 4d_dataset.view(5000, -1)
(. Значение -1
говорит PyTorch, чтобы выяснить длину второго измерения автоматически)
У меня есть 3D-функции: 2D для изображения и одно дополнительное измерение для цветовых каналов. Будет ли он работать, если я передам функции как 5000xnxnx3. 5000 - количество точек данных nxnx3 - размер изображения – Sarthak
В принципе, да, но проверьте изменение моего ответа. – pho7
4d Dataset может быть передан как функции, в которых нет необходимости в представлении вида. – Sarthak