[代码复现]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.mzph.cn/news/621130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 拍照以及相册中选择(适配高版本)————上传头像并裁剪(一)

前言 在项目研发中,相信大家都遇到过给用户增加头像照片的需求。 随着手机版本的不断更新,android 8、android 9、android 10、android 12、android 13、鸿蒙系统等等;遇到这个功能需求,大家肯定会想,“这还不好写&…

【Python学习】Python学习17- File(文件) 方法

目录 [TOC](【Python学习】Python学习17- File(文件) 方法) 文章所属专区 Python学习 前言 本章节主要说明Python文件操作的具体说明 open()方法 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数&#…

Spark算子(RDD)超细致讲解

SPARK算子(RDD)超细致讲解 map,flatmap,sortBykey, reduceBykey,groupBykey,Mapvalues,filter,distinct,sortBy,groupBy共10个转换算子 (一)转换算子 1、map from pyspark import SparkContext# 创建SparkContext对象 sc Spark…

信息系统中的需求分析

软件需求是指用户对新系统在功能、行为、性能、设计约束等方面的期望。根据IEEE的软件工程标准词汇表,软件需求是指用户解决问题或达到目标所需的条件或能力,是系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或能力,…

Fastjson库将JSONObject转换为实体类

嗨,大家好,欢迎来到程序猿漠然公众号,我是漠然。 在Java编程中,使用Fastjson库将JSONObject转换为实体类的过程是一种常见的数据处理操作。Fastjson是一个由阿里巴巴开发的高性能JSON处理库,它简化了JSON数据的读写操作…

传感数据分析——傅里叶滤波:理论与公式

传感数据分析——傅里叶滤波:理论与公式 引言 在传感数据分析领域,傅里叶滤波是一种重要的信号处理技术,被广泛应用于各种领域,如通信、图像处理、音频处理以及生物医学等。本文将简单探讨傅里叶滤波的理论基础和相关公式&#…

Azure Machine Learning - 视频AI技术

Azure AI 视频索引器是构建在 Azure 媒体服务和 Azure AI 服务(如人脸检测、翻译器、Azure AI 视觉和语音)基础之上的一个云应用程序,是 Azure AI 服务的一部分。 有了 Azure 视频索引器,就可以使用 Azure AI 视频索引器视频和音频…

向伟人学习反焦虑,在逆境中崛起

第一、乐观的精神。 伟人在长期以来的读书、思考和实践,突破了思想认知限制,并最终在更高的思维层面上,建立起了强大的精神信念感。 在危险环境中表示绝望的人, 在黑暗中看不见光明的人, 只是懦夫与机会主义者。 —— …

蓝桥杯练习题(八)

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

[晓理紫]每日论文推送(有中文摘要,源码或项目地址)--机器人、视觉相关

专属领域论文订阅 VX关注{晓理紫},每日更新论文,如感兴趣,请转发给有需要的同学,谢谢支持 二维码 分类: 大语言模型LLM视觉模型VLM扩散模型视觉导航具身智能,机器人强化学习开放词汇,检测分割 晓理紫今日论…

二叉树的中序遍历【二叉树】【递归】

Problem: 94. 二叉树的中序遍历 文章目录 思路 & 解题方法复杂度Code 思路 & 解题方法 二叉树简单递归。 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) Code # Definition for a binary tree node. # class TreeNode: # def __init__(se…

Java重修第五天—面向对象3

通过学习本篇文章可以掌握如下知识 1、多态; 2、抽象类; 3、接口。 之前已经学过了继承,static等基础知识,这篇文章我们就开始深入了解面向对象多态、抽象类和接口的学习。 多态 多态是在继承/实现情况下的一种现象&#xf…

【汇编要笑着学】汇编模块化编程 | call和ret调用指令 | jmp跳转指令 | inc自加指令

Ⅰ.汇编模块化编程 0x00 一个简单的例子 我们了解模块化编程前先给出一个例子,方便大家快速了解。 SECTION MBR vstart0x7c00 ; 起始地址编译在0x7c00mov ax,cs mov ds,ax mov es,axmov ss,axmov fs,axmov sp,0x7c00 ; 上面这些都没什…

【工作日语】二、IT用语

バグ 缺陷ボタン 按钮チックする 检查クリアする 清除クリックする 点击クライアント 客户机コーディング 编码コマンド 命令コメント 注释コンパイルする 编译コンピュータ 计算机コントロール 控制カーソル 光标データ 数据データベース 数据库デバッグ 调试ドキュメント 文…

camtasia studio2024免费版如何下载?怎么录屏?

camtasia studio怎么录屏?Camtasia Studio是一款专门录制屏幕动作的工具,它能在任何颜色模式下轻松地记录屏幕动作,包括影像、音效、鼠标移动轨迹、解说声音等等。一般情况下,用户使用camtasia studio进行录屏时,需要注…

【进程调度】基于优先级的轮转调度C++实现算法

一、简介 1.1 背景 在计算机科学领域,进程调度是操作系统中一个关键的组成部分,它负责协调系统中各个进程的执行顺序,以最大程度地提高系统资源利用率。在这篇博客中,将深入探讨基于优先级的轮转调度算法,该算法结合…

Vue3-customRef的使用

读取数据前,需要先track() 告诉Vue数据msg很重要,你要对msg进行持续关注,一旦msg变化就去更新 修改数据后,需要trigger()收尾 通知Vue一下数据msg变化了 自定义ref如何防抖 hooks中…

UniApp调试支付宝沙箱(安卓)

先看下这里完整的交互的图:小程序文档 - 支付宝文档中心 一、打包 不管怎样,先打个包先。可以直接使用云端证书、云端打包,只需要指定包名即可。 二、在支付宝开放平台创建应用 这个参考官方的过程就可以了,只要有刚才打的包&…

Fastadmin上传图片服务端压缩图片,实测13.45M压缩为29.91K

先前条件:第一步安装compose,已安装忽略。 先上截图看效果 一、在fastadmin的根目录里面输入命令安装think-image composer require topthink/think-image二、找到公共上传类,application/common/library/Upload.php,在最下面…

Redis系列之使用Lua脚本

什么是lua脚本? lua语言是一个轻量级的脚本语言,可以嵌入其他语言中使用,调用宿主语言的功能。lua语法简单,小巧,源码一共才200多K,本身不会有太强的功能,很多的语言也支持lua语言,…