Построение GNN для выполнения графовой регрессии

Добро пожаловать в сообщение блога, в котором я рассказываю о своем увлекательном путешествии по программе Google Summer of Code (GSOC), уделяя особое внимание своей второй неделе прогресса. Я надеюсь, что у вас была фантастическая неделя!

После моего предыдущего обновления я упомянул, что мое основное внимание будет сосредоточено на построении модели Graph Neural Network (GNN). В соответствии с этой целью мои усилия на этой неделе были направлены на структурирование объединенного набора данных, полученного из cbioportal и Pathway Commons, в соответствии со стандартом PyTorch Geometric (PyG). Этот важный шаг позволяет нам использовать возможности PyG и использовать набор данных для построения базовой GNN для прогнозирования общей выживаемости (в месяцах) пациентов с использованием графической регрессии.

Регрессия графа включает прогнозирование непрерывных или числовых значений для узлов или ребер в графе. В отличие от задач классификации, которые сосредоточены на дискретных метках, регрессия графа использует структурную и атрибутивную информацию графа для оценки количественных значений. Теперь давайте углубимся в прогресс, которого я добился за эту неделю.

Мой прогресс на этой неделе

Мое основное внимание было сосредоточено на разработке базовой модели GNN для работы с набором данных, который я предварительно обработал на предыдущей неделе.

После продуктивного разговора с моим наставником мы решили использовать регрессию графов вместо классификации графов, что было шагом, который я имел в виду при обработке моего набора данных ранее. Это потребовало от меня повторной предварительной обработки набора данных путем создания отдельных графиков для каждого пациента в наборе данных. Поскольку набор данных состоял из 78 пациентов, из которых 62 в обучающем наборе и 16 в тестовом наборе, мне нужно было создать список из 62 графиков для обучающего набора и 16 графиков для тестового набора.

Затем эти списки были преобразованы в список объектов данных с помощью функции PyG: torch_geometric.data. Под руководством моих наставников мы устранили ошибку, с которой я столкнулся при создании графиков для конкретных пациентов во время другого полезного звонка. Следуя этим шагам, следующим этапом было создание пакетов из данных и плавное построение модели.

Обзор достигнутого прогресса

  • Подготовка набора данных: я успешно создал два отдельных списка графиков для конкретных пациентов, один для обучающего набора, а другой для тестового набора. Затем эти списки были преобразованы в формат, совместимый с PyTorch Geometric (PyG), путем преобразования их в список объектов данных.
# Convert graphs_train to a list of Data objects
data_train = [Data(x=torch.tensor(graph[0].reshape(len(graphs_train[0][0]), 1)), edge_index=graph[1], y=torch.tensor(graph[2])) for graph in graphs_train]

# Convert graphs_test to a list of Data objects
data_test = [Data(x=torch.tensor(graph[0].reshape(len(graphs_test[0][0]), 1)), edge_index=graph[1], y=torch.tensor(graph[2])) for graph in graphs_test]
  • Создание пакетов: я создал пакеты из списка объектов данных как для обучающего, так и для тестового набора. Этот шаг имел решающее значение для эффективного обучения и оценки модели.

  • Построение модели GNN. Используя модуль PyG GCNConv, я построил базовую модель графовой нейронной сети (GNN). Модель состояла из 2 скрытых слоев, 1 входного слоя и 1 выходного слоя, всего 5 слоев. Однако первоначальная оценка показала возможности для улучшения, поскольку среднеквадратическая ошибка (MSE) указывала на субоптимальную производительность с начальным значением приблизительно 850.

Возникшие проблемы

Прошедшая неделя поставила передо мной несколько задач, к каждой из которых я подошла решительно и настойчиво. Во-первых, я столкнулся с трудностями при попытке разбить свои данные на пакеты с помощью функции Batch из PyG. Кроме того, я столкнулся с проблемами с созданными мной графиками для конкретных пациентов, поскольку они давали неожиданные результаты. Кроме того, на этапе обучения модели я столкнулся с ошибками, связанными с совместимостью типов данных. Однако под руководством и поддержкой моих наставников я смог найти и решить эти проблемы, в конечном итоге успешно запустив свою модель.

Преодоление этих проблем дало мне ценный опыт обучения и усилило важность поиска руководства и сотрудничества в сообществе GSoC. Я с радостью приступаю к решению предстоящих задач с новой уверенностью и продолжаю добиваться прогресса в своем проекте.

Мои планы на следующую неделю

На этой неделе я сосредоточусь на двух основных вещах, которые включают в себя

  1. Улучшение производительности модели. Чтобы повысить эффективность модели, я буду реализовывать следующие стратегии: увеличение количества периодов обучения до 100 или более, исследование добавления дополнительных слоев в модель и экспериментирование с обучением модели без использования предварительно созданных партии. Я также проконсультируюсь со своими наставниками, чтобы изучить альтернативные методы улучшения моделей GNN.
  2. Вклад набора данных в PyTorch Geometric: я буду активно взаимодействовать с сообществом PyG, чтобы понять необходимые шаги для предоставления предварительно обработанного базового набора данных, который я создал на этих начальных этапах проекта. Этот процесс познакомит меня с требованиями и рекомендациями по подготовке наборов данных для участия в PyG.
  3. Кроме того, я буду уделять время усовершенствованию своих блокнотов, добавляя информативные разделы и комментарии. Эти изменения повысят ясность и позволят читателям следовать пошаговому процессу, связанному с созданием объединенного набора данных, построением структуры графа и построением базовой модели GNN.

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

Забегая вперед, эта новая неделя сулит большие надежды, поскольку я углублюсь в улучшение производительности модели и предприму первые шаги по добавлению набора данных в PyTorch Geometric. Эти усилия приблизят меня к достижению целей моего пути к GSoC.

Я сердечно приглашаю вас присоединиться ко мне на следующей неделе, когда я продолжу делиться последними обновлениями и идеями. А пока спасибо за участие в этом путешествии!

(P.S. Если вам интересно узнать больше о моем проекте, не стесняйтесь проверить его на GitHub и прочитать о нем в списке проектов GSoC. github.com/cannin /gsoc_2023_pytorch_pathway.., summerofcode.withgoogle.com/programs/2023/p..)

Первоначально опубликовано на https://jamesfav.hashnode.dev.