Как обрабатывать графики разных размеров в DataLoader для модели GAT в PyTorch Geometric?Python

Программы на Python
Ответить
Anonymous
 Как обрабатывать графики разных размеров в DataLoader для модели GAT в PyTorch Geometric?

Сообщение Anonymous »

Я пытаюсь создать DataLoader для входных данных в модель Graph Attention Network (GAT), но при загрузке данных возникает ошибка. >
Входные данные состоят из двух графиков разного размера. Я не хочу менять размер графиков.

Код: Выделить всё

Dtest = pd.read_csv(os.path.join(database, "test.csv"))
Dtrain = pd.read_csv(os.path.join(database, "train.csv"))
Dval = pd.read_csv(os.path.join(database, "val.csv"))

X_train, Y_train, X_val, Y_val, X_test, Y_test = [], [], [], [], [], []
def RUN(DF):
X, Y = [], []
for index in range(0, len(DF)):
PDATA, DDATA, Label = GET(index, DF)
if PDATA != None:
X.append([PDATA, DDATA])
Y.append(Label)
return X, Y

X_train, Y_train = RUN(Dtrain)
X_val, Y_val = RUN(Dval)
X_test, Y_test = RUN(Dtest)
Вот пример данных:

Код: Выделить всё

for i in range(10):
print(X_train[i], Y_train[i])
ВЫВОД: [PDATA, DDATA], метка

Код: Выделить всё

[Data(x=[7962, 6], edge_index=[2, 7917]), Data(x=[49, 6], edge_index=[2, 52])] 1
[Data(x=[7968, 6], edge_index=[2, 7847]), Data(x=[49, 6], edge_index=[2, 52])] 1
[Data(x=[10864, 6], edge_index=[2, 10782]), Data(x=[49, 6], edge_index=[2, 52])] 1
[Data(x=[11732, 6], edge_index=[2, 11513]), Data(x=[49, 6], edge_index=[2, 52])] 1
[Data(x=[10895, 6], edge_index=[2, 10721]), Data(x=[49, 6], edge_index=[2, 52])] 1
[Data(x=[12387, 6], edge_index=[2, 12334]), Data(x=[49, 6], edge_index=[2, 52])] 1
[Data(x=[15115, 6], edge_index=[2, 14863]), Data(x=[72, 6], edge_index=[2, 77])] 1
[Data(x=[15681, 6], edge_index=[2, 15538]), Data(x=[72, 6], edge_index=[2, 77])] 1
[Data(x=[15681, 6], edge_index=[2, 15538]), Data(x=[72, 6], edge_index=[2, 77])] 1
[Data(x=[15681, 6], edge_index=[2, 15538]), Data(x=[72, 6], edge_index=[2, 77])] 1
...
Я создал собственный класс набора данных следующим образом:

Код: Выделить всё

class GraphDataset(Dataset):
def __init__(self, X, Y):
self.X = X
self.Y = Y

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

def __getitem__(self, idx):
graphs = self.X[idx]
label = self.Y[idx]
return graphs, label
Затем я создаю загрузчики данных для обучения, проверки и тестирования:

Код: Выделить всё

train_dataset = GraphDataset(X_train, Y_train)
val_dataset = GraphDataset(X_val, Y_val)
test_dataset = GraphDataset(X_test, Y_test)

train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)

for (graphs1, graphs2), labels in train_loader:
print(graphs1)
print(graphs2)
print(labels)
Однако, когда я пытаюсь пройти через train_loader, я получаю следующую ошибку:
RuntimeError:

Код: Выделить всё

Sizes of tensors must match except in dimension 1. Expected size 11726 but got size 4751 for tensor number 1 in the list.

Код: Выделить всё

RuntimeError                              Traceback (most recent call last)
Cell In[195], line 1
----> 1 for (graphs1, graphs2), labels in train_loader:
Как я могу обрабатывать графики разных размеров в моем DataLoader, не изменяя размеры графиков, и избежать этой ошибки?

Подробнее здесь: https://stackoverflow.com/questions/793 ... in-pytorch
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»