Мини-пакеты с загрузчиком данных и 3D-вводом. (Pytorch)

#python #neural-network #pytorch

#python #нейронная сеть #pytorch

Вопрос:

Я изо всех сил пытался управлять и создавать пакеты для 3D-тензора. Я использовал его раньше как способ создания пакетов для 1D тензора. Однако в моем текущем исследовании мне нужно создавать пакеты из тензора с формой (1024,1024,2).

Я создал пользовательские данные для использования в качестве входных данных для метода DataLoader в pytorch. Я создал следующее для одномерного массива:

 class CustomDataset(Dataset):
def __init__(self, x_tensor, y_tensor):
    self.xdomain = x_tensor
    self.ydomain = y_tensor
    
def __getitem__(self, index):
    return (self.xdomain[index], self.ydomain[index])

def __len__(self):
    return len(self.xdomain)
  

Это работает довольно хорошо, однако я понял, что это не работает для тензоров x_tensor и y_tensor формы (1024,1024,2) и (1024,1024,1) соответственно. Я понимаю, что мне нужно изменить функции __ getitem __ и __ len __ таким образом, чтобы они могли разделять тензоры на пакеты.

Я перепробовал много вещей, но я знаю, что это может сработать, так это то, что я мог бы сгладить эти тензоры в формы (1024 x1024,2) и (1024×1024,1). Однако мне пришлось бы не только изменить свое определение NN, но и мой код.

Поэтому я хочу оставить все как есть и попытаться понять, как создать эти функции, если это возможно. Что я понимаю из этих функций: __len__ так что len(dataset) возвращает размер набора данных. __getitem__ для поддержки индексации таким образом, чтобы dataset [i] можно было использовать для получения i-го образца.

С этими знаниями я создал этот класс, который находит индексы первых 2-х измерений (чтобы найти i-й образец). Однако это привело к тому, что ввод NN был равен (1024×1024,2), а вывод (1024×1024,1). И я хочу, чтобы это было (1024,1024,2) и (1024,1024,1).

Если бы кто-нибудь, лучше разбирающийся в загрузчике данных и мини-пакетах, мог объяснить, чего мне не хватает, это было бы потрясающе. Прежде всего, возможно ли это?

Спасибо, что прочитали это, извините, если этот вопрос слишком простой. Надеюсь, понятно.