PGL图学习之基于GNN模型新冠疫苗任务[系列九]

news2024/11/28 2:31:49

PGL图学习之基于GNN模型新冠疫苗任务[系列九]

项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5123296?contributionType=1

# 加载一些需要用到的模块,设置随机数
import json
import random
import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
import networkx as nx

from utils.config import prepare_config, make_dir
from utils.logger import prepare_logger, log_to_file
from data_parser import GraphParser

seed = 123
np.random.seed(seed)
random.seed(seed)

数据EDA

# https://www.kaggle.com/c/stanford-covid-vaccine/data
# 加载训练用的数据
df = pd.read_json('../data/data179441/train.json', lines=True)
# 查看一下数据集的内容
sample = df.loc[0]
print(sample)

index                                                                400
id                                                          id_2a7a4496f
sequence               GGAAAGCCCGCGGCGCCGGGCGCCGCGGCCGCCCAGGCCGCCCGGC...
structure              .....(((...)))((((((((((((((((((((.((((....)))...
predicted_loop_type    EEEEESSSHHHSSSSSSSSSSSSSSSSSSSSSSSISSSSHHHHSSS...
signal_to_noise                                                        0
SN_filter                                                              0
seq_length                                                           107
seq_scored                                                            68
reactivity_error       [146151.225, 146151.225, 146151.225, 146151.22...
deg_error_Mg_pH10      [104235.1742, 104235.1742, 104235.1742, 104235...
deg_error_pH10         [222620.9531, 222620.9531, 222620.9531, 222620...
deg_error_Mg_50C       [171525.3217, 171525.3217, 171525.3217, 171525...
deg_error_50C          [191738.0886, 191738.0886, 191738.0886, 191738...
reactivity             [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
deg_Mg_pH10            [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
deg_pH10               [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
deg_Mg_50C             [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
deg_50C                [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, ...
Name: 0, dtype: object

例如 deg_50C、deg_Mg_50C 这样的值全为0的行,就是我们需要预测的。

structure一行,数据中的括号是为了构成边用的。

本案例要预测RNA序列不同位置的降解速率,训练数据中提供了多个ground值,标签包括以下几项:reactivity, deg_Mg_pH10, and deg_Mg_50

reactivity - (1x68 vector 训练集,1x91测试集) 一个浮点数数组,与seq_scores有相同的长度,是前68个碱基的反应活性值,按顺序表示,用于确定RNA样本可能的二级结构。

deg_Mg_pH10 - (训练集 1x68向量,1x91测试集)一个浮点数数组,与seq_scores有相同的长度,是前68个碱基的反应活性值,按顺序表示,用于确定在高pH (pH 10)下的降解可能性。

deg_Mg_50 - (训练集 1x68向量,1x91测试集)一个浮点数数组,与seq_scores有相同的长度,是前68个碱基的反应活性值,按顺序表示,用于确定在高温(50摄氏度)下的降解可能性。

# 利用GraphParser构造图结构的数据
args = prepare_config("./config.yaml", isCreate=False, isSave=False)
parser = GraphParser(args) # GraphParser类来自data_parser.py
gdata = parser.parse(sample) # GraphParser里最主要的函数就是parse(self, sample)

{'nfeat': array([[0., 0., 0., ..., 0., 0., 0.],
        [0., 0., 0., ..., 0., 0., 0.],
        [0., 1., 0., ..., 0., 0., 0.],
        ...,
        [1., 0., 0., ..., 0., 0., 0.],
        [1., 0., 0., ..., 0., 0., 0.],
        [1., 0., 0., ..., 0., 0., 0.]], dtype=float32),
 'edges': array([[  0,   1],
        [  1,   0],
        [  1,   2],
        ...,
        [142, 105],
        [106, 142],
        [142, 106]]),
 'efeat': array([[ 0.,  0.,  0.,  1.,  1.],
        [ 0.,  0.,  0., -1.,  1.],
        [ 0.,  0.,  0.,  1.,  1.],
        ...,
        [ 0.,  1.,  0.,  0.,  0.],
        [ 0.,  1.,  0.,  0.,  0.],
        [ 0.,  1.,  0.,  0.,  0.]], dtype=float32),
 'labels': array([[ 0.    ,  0.    ,  0.    ],
        [ 0.    ,  0.    ,  0.    ],
        ...,
        [ 0.    ,  0.9213,  0.    ],
        [ 6.8894,  3.5097,  5.7754],
        [ 0.    ,  1.8426,  6.0642],
          ...,        
        [ 0.    ,  0.    ,  0.    ],
        [ 0.    ,  0.    ,  0.    ]], dtype=float32),
 'mask': array([[ True],
        [ True],
     ......
       [False]])}

nfeat —— 节点特征

edges —— 边

efeat —— 边特征

labels —— 节点标签有三种,所以这可以看成是一个多分类任务

图数据可视化

# 图数据可视化
fig = plt.figure(figsize=(24, 12))
nx_G = nx.Graph()
nx_G.add_nodes_from([i for i in range(len(gdata['nfeat']))])

nx_G.add_edges_from(gdata['edges'])
node_color = ['g' for _ in range(sample['seq_length'])] + \
['y' for _ in range(len(gdata['nfeat']) - sample['seq_length'])]
options = {
    "node_color": node_color,
}
pos = nx.spring_layout(nx_G, iterations=400, k=0.2)
nx.draw(nx_G, pos, **options)

plt.show()

Snipaste_2022-11-25_20-53-23.jpg

模型训练&预测

# 我们在 layer.py 里定义了一个新的 gnn 模型(my_gnn),消息传递的过程中加入了边的特征(edge_feat)
# 然后修改 model.py 里的 GNNModel
# 使用修改后的模型,运行 main.py。为节省时间,设置 epochs = 100

!python main.py --config config.yaml

结果返回的是 MCRMSE 和 loss

{‘MCRMSE’: 0.5496759, ‘loss’: 0.3025484172316889}

[DEBUG] 2022-11-25 17:50:42,468 [  trainer.py:   66]:	{'MCRMSE': 0.5496759, 'loss': 0.3025484172316889}
[DEBUG] 2022-11-25 17:50:42,468 [  trainer.py:   73]:	write to tensorboard ../checkpoints/covid19/eval_history/eval
[DEBUG] 2022-11-25 17:50:42,469 [  trainer.py:   73]:	write to tensorboard ../checkpoints/covid19/eval_history/eval
[INFO] 2022-11-25 17:50:42,469 [  trainer.py:   76]:	[Eval:eval]:MCRMSE:0.5496758818626404	loss:0.3025484172316889
[INFO] 2022-11-25 17:50:42,602 [monitored_executor.py:  606]:	********** Stop Loop ************
[DEBUG] 2022-11-25 17:50:42,607 [monitored_executor.py:  199]:	saving step 12500 to ../checkpoints/covid19/model_12500
!python main.py --mode infer

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

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

相关文章

叠氮荧光染料:Azide-FL-BDP|1379771-95-5|BDP FL N3叠氮

BDP FL叠氮化物是一种类似于BODIPY FL叠氮化物的荧光染料,是一种具有点击化学性质的荧光染料。该荧光团是硼二吡咯甲基类荧光染料的代表,在水环境中具有较高的量子产率。azide系列产品包括可用于进一步连接的azide-acid;azide-amine&#xff…

CDGA|促进数据生产要素在大湾区自由流动,培养数据治理人才先行

在数字经济时代,数据已经成为社会经济发展的关键要素,是世界各国竞相争夺的基础性战略资源。 探究如何在掌握数字经济自主权基础上优化跨境数据流动的路径,需要考虑平衡跨境数据流动所引起的数据主权、数据保护和数据自由流动的利益冲突&…

李铁不用归化球员的真正原因 #小姐姐爱体育#第9部

中国自古以来是人情社会,不论走到哪里都要讲关系,只要你有足够铁的关系,就没有办不了的事情。不过对于中国男足前教练来说,虽然他的名字叫作李铁,但是办的事情却不是关系很铁的所作所为。 在李铁上任国家队总教练之前&…

【学习笔记51】ES6的新增属性Set和Map

一、Set set类似于数组的一种数据结构,内部按照索引排序(但是不能通过索引取值)语法:let s new Set([数据1, 数据2, 数据3])特点: 天生不支持重复数据 let arr [1, 2, 2, 3, 4, 4, 4, 3];let s new Set(arr);console.log(原数组:,arr);con…

为什么要申请实用新型专利呢?

问题一:实用新型专利从申请到拿证需要多长时间? 有三种申请通道。 1、普通申请通道:通常4-6个月就能获得授权; 2、优先审查通道:通常2-6个月就能拿证; 3、快速预审通道:通常不超过7个工作日…

万字详解数据结构——树

数据结构——树 🏖️专题:数据结构 🙈作者:暴躁小程序猿 ⛺简介:双非本科大二小菜鸡一枚,希望和大家一同进步~ 树知识点目录数据结构——树一、二叉树1.树概念及结构1.1树的概念1.2 树的相关概念1.3 树的表…

数学建模论文六大获奖技巧总结(想得奖的进来看)

目录 一,摘要一定要认真写 二,论文的排版一定要美观 三,模型假设一定要认真对待 ●模型假设的意义 四,问题分析推荐使用流程图 五,推荐使用改进或优化后的模型 六,建议增加模型检验模块 一&#xff0…

什么是Java运算?Java运算好学吗?

提到运算,你可能会立即想到加、减、乘、除四则运算以及“九九乘法表”。Java 语言中有很多进行数据运算的方式,比如:算术运算、比较运算、逻辑运算、赋值运算、三目运算等。每一种运算方式,又都包含了很多的运算符,小编…

【American English】美语口语,浊化,弱读,连读,省音

1【American English】美式发音,英语发音,美国音音标列表及发音2【American English】美语的连读规则3【American English】美语口语中常见的 Gonna、wanna、gotta 含义及用法4【American English】美语口语,浊化,弱读&#xff0c…

单片机---1MHz方波的产生(中断和查询方式)

单片机—定时/计数器方式产生1MHz方波 要求: 使用定时器1,采用工作方式1,在输出口P2.0产生周期未1秒的方波; 定时计数基本流程 计算初值定义TMOD寄存器确定 T0 或 T1 为工作方式把计数器初值装入 THx 和 TLx (x0,1与上面确定的T0,T1保持一…

Git Hooks简介及结合Husky和Commitlint检测提交代码规范

文章目录一、Git Hooks1.1 目标1.2 常用hooks1.3 核心钩子二、Commitlint2.1 安装2.2 创建配置文件三、Husky3.1 安装3.2 启动3.3 生成指令并执行3.4 通过commit-msg规范化提交信息3.5 通过pre-commit检测提交代码规范四、验证测试4.1 验证提交规范4.2 验证代码规范五、再进一步…

产品经理撰写需求文档

众所周知,需求文档的撰写是每位产品经理工作中必备的技能。 PRD文档没有标准的规范,也没有统一的模板,每个公司都不一样,并且每个人也不一样,这个取决于个人习惯和团队要求。 接下来主要讲作为一个入门的产品经理&…

使用小程序实现AI动漫脸特效

文章目录一、文章前言二、具体流程及准备三、开发步骤四、完整代码一、文章前言 最近在Dou音很火的AI绘画特效能够实现将人脸进行动漫化,让我们用小程序也制作一个吧。 二、具体流程及准备 2.1、注册百度开放平台及微信公众平台账号。 2.2、下载及安装微信Web开发者…

代码源每日一题div1 平方计数

平方计数 - 题目 - Daimayuan Online Judge 题意: 思路: 首先注意到暴力枚举一定超时,因此我们考虑只枚举一个指针,然后推一推式子降低另一个指针的复杂度 对于完全平方数这个条件,我们无法直接转换 即对于每一个a[…

sCrypt 合约中的椭圆曲线算法:第一部分

我们提出了一种新颖有效的方法,用于在脚本中计算椭圆曲线上的点加法和标量乘法。对于点加法,我们将超过 1MB 的脚本大小减少到约 400 字节。 椭圆曲线点加法 对于每个 i,每个点 Pi 由两个坐标 (xi, yi) 表示。要计算 P3 P1 P2,…

大数据培训教程Shuffle机制

Shuffle机制 Map方法之后,Reduce方法之前的数据处理过程称之为Shuffle。如图4-14所示。 图4-14 Shuffle机制 2 Partition分区 1、问题引出 要求将统计结果按照条件输出到不同文件中(分区)。比如:将统充结果 按照手机归属地不同省份输出到不同文件中(分区) 2、默…

环境土壤物理模型HYDRUS建模方法与多案例应用

HYDRUS是由著名土壤学家Rien van Genuchten和Jirka Simunek等人基于Windows系统界面开发的环境土壤物理模拟软件,是模拟一维和多维变饱和多孔介质的水流、溶质运移、根系吸水和溶质吸收、热量传输等的强有力工具。除基础功能以外,该模型还附有一系列扩展…

C/C++:双重循环中的break

break语句的执行只会导致其所在层的循环被中止。在一个嵌套的双重循环中,处于内层循环内的break被执行时,只会导致内层循环的中止,外层循环不受影响。 本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载&#x…

Android -- 每日一问:如何理解 Gradle?Gradle 在 Android 的构建过程中有什么作用?

一、什么是 Gradle ? 一个像 Ant 一样的非常灵活的通用构建工具一种可切换的, 像 maven 一样的基于合约构建的框架支持强大的多工程构建支持强大的依赖管理(基于 ApacheIvy )支持已有的 maven 和 ivy 仓库支持传递性依赖管理, 而不需要远程仓库或者 pom.xml 或者 ivy 配置文件…

深度学习如何具有人类智能实现论述假说

🍿*★,*:.☆欢迎您/$:*.★* 🍿 正文 如图一所示 目前深度学习缺少的是 红色大框的部分 智能没有自我意识 同时 训练的方法也是不对的 直到最近的扩散模型 才刚刚有了一点起色 具体的训练方法 类似图二所示 假设人类获取信息只是通过眼睛 那么眼睛每次…