Anonymous
Как обрабатывать графики разных размеров в DataLoader для модели GAT в PyTorch Geometric?
Сообщение
Anonymous » 16 янв 2025, 18:53
Я пытаюсь создать
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
1737042838
Anonymous
Я пытаюсь создать [b]DataLoader[/b] для входных данных в модель [b]Graph Attention Network (GAT)[/b], но при загрузке данных возникает ошибка. > Входные данные состоят из двух графиков разного размера. Я не хочу менять размер графиков. [code]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) [/code] Вот пример данных: [code]for i in range(10): print(X_train[i], Y_train[i]) [/code] [b]ВЫВОД:[/b] [PDATA, DDATA], метка [code][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 ... [/code] Я создал собственный класс набора данных следующим образом: [code]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 [/code] Затем я создаю загрузчики данных для обучения, проверки и тестирования: [code]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) [/code] Однако, когда я пытаюсь пройти через train_loader, я получаю следующую ошибку: [b]RuntimeError:[/b] [code]Sizes of tensors must match except in dimension 1. Expected size 11726 but got size 4751 for tensor number 1 in the list.[/code] [code]RuntimeError Traceback (most recent call last) Cell In[195], line 1 ----> 1 for (graphs1, graphs2), labels in train_loader: [/code] Как я могу обрабатывать графики разных размеров в моем DataLoader, не изменяя размеры графиков, и избежать этой ошибки? Подробнее здесь: [url]https://stackoverflow.com/questions/79362238/how-to-handle-graphs-of-different-sizes-in-dataloader-for-a-gat-model-in-pytorch[/url]