[代码复现]BrainGNN: Interpretable Brain Graph Neural Network for fMRI Analysis

目录

1. 论文资料

2. 代码复现步骤及可能存在的问题

2.1. 环境配置

2.2. 代码运行

3. 为啥跑这个代码


1. 论文资料

(1)论文原文:BrainGNN:用于fMRI分析的可解释脑图神经网络 - ScienceDirect

(2)论文代码:GitHub - xxlya/BrainGNN_Pytorch:BrainGNN 的初步实现

(3)论文笔记:[论文精读]BrainGNN: Interpretable Brain Graph Neural Network for fMRI Analysis-CSDN博客

2. 代码复现步骤及可能存在的问题

2.1. 环境配置

        ①在readme中给出pip install -r requirements.txt,且代码中直接给出了requirements.txt。但是有可能安装会报错,我是在每个.py文件里面看着import自己安装的库(在终端里面直接pip,不用太在意版本,大概率最新的版本和它的也兼容)

        ②torch sparse和torch scatter 可能存在不能直接pip的问题,可以去https://pytorch-geometric.com/whl/ 找自己torch对应版本的sparse和scatter

        ③numpy 可能需要降版本(如果自己版本太高),直接pip install numpy 1.21

        ④实在其他什么库版本报错的话淘bao解决也只需要几十块钱惹

2.2. 代码运行

(1)01-fetch_data.py

        ①这个文件是为了自动从网上下载ABIDE数据集,默认下载cpac的cc200。下载出来应该是一堆不同站点的1D文件,没记错的话每个都是146*200的矩阵(行为时间序列,列为ROI)

        ②能运行直接运行就好了,可以右上角运行也可以终端python 01-fetch_data.py运行

        ③在无环境报错代码报错的情况下开始下载ABIDE数据集,datasets.fetch_abide_pcp()是下载数据集的方法。需要注意的是,如果网络不好/网慢可能会报错超时read time out。需要在网络良好的情况下下载(应该是用不用梯zi都可以,反正自己试试,以下是以代码默认参数开始下载的状态:

        ④如果状态良好的话,1D文件一般一个是几秒钟就下好了,即如0% 2s remaining。如果出现像上面一样89.6 min remaining的话只能说网太慢了,建议换个网。

        ⑤这个文件下载下来很小的,就387.3M。

        ⑥如果需要下载完整的未经处理的.nii数据,可以参考在https://nilearn.github.io/dev/modules/generated/nilearn.datasets.fetch_abide_pcp.html#nilearn.datasets.fetch_abide_pcp 中提供的参数修改代码中的部分。比如将rois_cc200改成func_preproc可以下载大小为110.33G的.nii(我觉得没有必要,因为下载下来也不能处理吧,dpabi要结构和功能像结合才能算功能连接矩阵好像)

        ⑦路径可能存在问题,我的总会报/home/azureuser/projects/BrainGNN/data/ABIDE_pcp/cpac/filt_noglobal/raw的错。这个在imports文件里的read_abide_stats_parall.py和preprocess_data.py有。如果报错的话根据报错改改路径就好了。大概率imports的文件还是不用去动它的。

        ⑧⭐中途可能会中断一次,但是没有关系。它很智能,在filt_noglobal文件下会生成一个中断文件,重新运行一次可以继续下载。所以似乎是有一个文件下不了,但是也不影响吧。

        ⑨下完之后我还是运行不了02-process,报错告诉我是因为没有correlation。因此我重新运行了01-fetch_data.py,它为我把每个数据装进文件夹并计算出额外的correlation.mat和partial_correlation.mat。现在每个被试文件中有三个数据文件。

(2)​​​​​​​02-process_data.py

        ①还是那句话直接右上角运行或者终端运行

        ②这个代码文件是在生成每个被试的.h5文件,整体文件名为raw

        ③我第一次运行的时候return 0退出了,但是啥也没发生,依旧不能运行03。后来发现也是路径问题,把raw下载到我F盘里面了,而不是Brain_GNN文件里。所以要么修改下载路径要么直接把下载到其他地方的raw文件拖到BrainGNN\data\ABIDE_pcp\cpac\filt_noglobal路径下就可以了。要是下对了当我没说就好了

(3)​​​​​​​03-main.py

        ①右上角运行或者终端运行

        ②我的首先运行了但是会显示:

        这是因为03里面没有main函数,因此我写了一句if __name__ == '__main__':,将03的所有代码包含进去:

这个就是把那句话写在前面,然后把后面的整体tab退格就好了

        ③这样可以运行了,但是又出现了别的报错:没有截图记录了,大概是说73行开始的

train_dataset = dataset[tr_index]

val_dataset = dataset[val_index]

test_dataset = dataset[te_index]

这三句话。

问题出在试图使用一个非法的索引类型。PyTorch Geometric 要求数据集的索引必须是切片(slice)、列表、元组、torch.tensor 或 np.ndarray 类型,并且数据类型必须是 long 或 bool。

代码试图用一个 ndarray 来索引数据集,这就是导致错误的原因。需要将索引转换为一个合法的类型。例如,如果索引是一个 numpy array,可以尝试将其转换为 torch tensor。

因此我把这三句话删除,改成了如下:

tr_torch = torch.from_numpy(tr_index)

val_torch = torch.from_numpy(val_index)

te_torch = torch.from_numpy(te_index)

train_dataset = dataset[tr_torch.long()]

val_dataset = dataset[val_torch.long()]

test_dataset = dataset[te_torch.long()]

就可以运行了。

        ④大概率没什么其他的问题了,直接运行就好,默认epoch是100,然后它也会保存best model。只是没有画图。

        ⑤我自己用我的画图方式画了它的acc和loss,以下为默认epoch下的结果:

3. 为啥跑这个代码

        ①新手友好向,数据是完全不用自己处理的,一套流程直接搞定

        ②代码时间很新,不会出现特别多的版本不兼容问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/319339.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024.1.14每日一题

LeetCode 83.删除排序链表中的重复元素 83. 删除排序链表中的重复元素 - 力扣(LeetCode) 题目描述 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输…

蓝桥杯练习题(八)

📑前言 本文主要是【算法】——蓝桥杯练习题(八)的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 …

汽车塑料零件透光率测试仪

塑料透光率测试仪在汽车制造及测试领域中应用广泛,主要用于测量各种玻璃、塑料、薄膜和透明或半透明材料的可见光透射率。 在汽车制造过程中,塑料透光率测试仪可用于检测塑料部件的透光性能。透光率是评估材料质量的重要指标之一,对于汽车的安…

从CES 2024看AI PC江湖

被称为消费电子“春晚”的CES,是科技行业在每一个新的年份,所敲响的第一个钟声。 今年CES 2024,AI PC则发出了“最强音”,是当之无愧的C位。 科技巨头都高度重视AI PC这个赛道,产业链上下游从芯片、设备商、系统软件方…

两周掌握Vue3(三):全局组件、局部组件、Props

文章目录 一、全局组件1.创建全局组件2.在main.js中注册全局组件3.使用全局组件 二、局部组件1.创建局部组件2.在另一个组件中注册、使用局部组件 三、Props1.定义一个子组件2.定义一个父组件3.效果 代码仓库:跳转 本博客对应分支:03 一、全局组件 Vue…

React项目实战--------极客园项目PC端

项目介绍:主要将学习到的项目内容进行总结(有需要项目源码的可以私信我) 关于我的项目的配置如下,请注意下载的每个版本不一样,写的api也不一样 一、项目介绍 1.资料 1)短信接收&M端演示&#xff1a…

【Python学习】Python学习16- 文件I/O

目录 【Python学习】Python学习16- 文件I/O 前言打印读取键盘输入打开和关闭文件open 函数access_mode值参考:File对象的属性 文件定位重命名和删除文件rename() 方法remove()方法 Python里的目录mkdir()方法chdir()方法getcwd() 方法rmdir()方法 参考 文章所属专区…

使用 rosdep 管理依赖关系

什么是rosdep? rosdep是 ROS 的依赖管理实用程序,可以与 ROS 包和外部库一起使用。 是一个命令行实用工具,用于标识和安装依赖项以生成或安装包。 在以下情况下,可以调用或调用它:rosdep 构建工作区并需要适当的依赖项…

设计模式之解释器模式【行为型模式】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某…

基于FFmpeg的简单Android视频播放器

1. 模块分割 首先对这个视频播放器所采用的一些部件要清楚。这个播放器主要可以拆分为4个部分: 1.解码:FFmpeg 2.音频输出:OpenSLES 3.视频渲染:OpenGLES 这些框架都是基于C的api,因此这次我们的主要工作将会集中…

龙蜥操作系统上安装MySQL:步骤详解与常见问题解决

目录 博客前言 一.下载MySQL 1.官网下载 2.上传文件到龙蜥操作系统中 ​编辑二.安装MySQL 1.检查操作系统中的默认数据库并移除 2.创建文件夹解压 3.开始安装 4.启动服务 ​编辑 5.登录修改密码,进行授权 三.第三方工具连接(naviact&#xff…

计网期末复习(一)

计网期末复习(一) – WhiteNights Site 标签:计算机网络 诶,期末。诶,复习。 TCP/IP参考模型的网络层提供的是? 区别于传输层,网络层提供不可靠无连接的数据报服务 当时看到TCP/IP就选了可靠有…

物联网智能控制器—福建蜂窝物联网科技有限公司

什么是物联网智能控制器? 物联网智能控制器是蜂窝物联自主研发的一种远程测控设备(RTU),负责对现场信号、工业设备的监测和控制。本质上是一个模块化封装的微型计算机设备,将相应的一些功能进行了封装,无需进行电路设计和硬件程序…

QT -狗狗管理工具

QT -狗狗管理工具 一、演示效果二、UML三、关键代码四、程序链接 一、演示效果 二、UML 三、关键代码 #include <QFrame> #include <QHBoxLayout> #include <QVBoxLayout> #include <QLabel> #include <QSizePolicy> #include <QDialog> …

【开发日记】IDEA“找不到或无法加载主类”问题

记录一个研究了两个小时的“玄学”问题找不到或无法加载主类。 ​1、问题 使用IDEA启动SpringBoot项目显示找不到或无法加载主类。 2、解决经历 尝试了很多种解决方法都没有解决&#xff0c;下面是我网上查询后尝试的一些方法。这些方法我都没有解决问题&#xff0c;是因为…

【开源】基于JAVA+Vue+SpringBoot的医院门诊预约挂号系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 功能性需求2.1.1 数据中心模块2.1.2 科室医生档案模块2.1.3 预约挂号模块2.1.4 医院时政模块 2.2 可行性分析2.2.1 可靠性2.2.2 易用性2.2.3 维护性 三、数据库设计3.1 用户表3.2 科室档案表3.3 医生档案表3.4 医生放号…

统信UOS操作系统上禁用IPv6

原文链接&#xff1a;统信UOS操作系统上禁用IPv6 hello&#xff0c;大家好啊&#xff01;继之前我们讨论了如何在麒麟KYLINOS上禁用IPv6之后&#xff0c;今天我要给大家带来的是在统信UOS操作系统上禁用IPv6的方法。IPv6是最新的网络通信协议&#xff0c;但在某些特定的网络环境…

iOS隐藏TextFiled控件输入键盘

1.效果: 显示数字键盘 显示优化键盘 切换键盘,并修改Return为Done 输出完成后,点击done隐藏键盘 2.主要实现代码: ViewController中实现接口UITextFieldDelegate 关联控件与变量 注册控件委委托 实现接口方法textFieldShouldReturn以隐藏键盘 如果要实现textfield输入长度控…

scroll-view在小程序页面里实现滚动,uniapp项目

要实现红框中的区域进行滚动,scroll-view必须写高 <template><!-- 合同-待确认 --><view class"viewport"><!-- 上 --><view class"top-box"><!-- tab --><view class"tabs"><textv-for"(ite…

MySQL 从零开始:06 数据检索

文章目录 1、数据准备2、限制结果3、完全限定名4、排序检索 所谓数据检索&#xff0c;就是前面所讲的”增删改查“的”查“。 注&#xff1a;本文使用的“行”指数据表中的“记录”&#xff0c;“列”指数据表中的“字段”。 在第四节《表的增删改查》中已经介绍了 select 查询…
最新文章