下面所有博客是个人对EEG脑电的探索,项目代码是早期版本不完整,需要完整项目代码和资料请私聊。

数据集
1、脑电项目探索和实现(EEG) (上):研究数据集选取和介绍SEED
相关论文阅读分析:
1、EEG-SEED数据集作者的—基线论文阅读和分析
2、图神经网络EEG论文阅读和分析:《EEG-Based Emotion Recognition Using Regularized Graph Neural Networks》
3、EEG-GNN论文阅读和分析:《EEG Emotion Recognition Using Dynamical Graph Convolutional Neural Networks》
4、论文阅读和分析:Masked Label Prediction: Unified Message Passing Model for Semi-Supervised Classification
5、论文阅读和分析:《DeepGCNs: Can GCNs Go as Deep as CNNs?》
6、论文阅读和分析: “How Attentive are Graph Attention Networks?”
7、论文阅读和分析:Simplifying Graph Convolutional Networks
8、论文阅读和分析:LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation
9、图神经网络汇总和总结
相关实验和代码实现:
1、用于图神经网络的脑电数据处理实现_图神经网络 脑电
2、使用GCN训练和测试EEG的公开SEED数据集
3、使用GAT训练和测试EEG公开的SEED数据集
4、使用SGC训练和测试SEED数据集
5、使用Transformer训练和测试EEG的公开SEED数据集_eeg transformer
6、使用RGNN训练和测试EEG公开的SEED数据集
辅助学习资料:
1、官网三个简单Graph示例说明三种层次的应用_graph 简单示例
2、PPI数据集示例项目学习图神经网络
3、geometric库的数据处理详解
4、NetworkX的dicts of dicts以及解决Seven Bridges of Königsberg问题
5、geometric源码阅读和分析:MessagePassin类详解和使用
6、cora数据集示例项目学习图神经网络
7、Graph 聚合
8、QM9数据集示例项目学习图神经网络
9、处理图的开源库

目录

  • QM9数据集:
  • QM9数据提取的特征:
  • 网络结构的设计
  • 官网示例代码注释:

QM9数据集:

QM9为小有机分子的相关的、一致的和详尽的化学空间提供量子化学特征,该数据库可用于现有方法的基准测试,新方法的开发,如混合量子力学/机器学习,以及结构-性质关系的系统识别。

新药物和新材料的计算从头设计需要对化合物空间进行严格和公正的探索。然而,由于其大小与分子大小相结合,大量未知领域仍然存在。报告计算了由CHONF组成的134k稳定有机小分子的几何、能量、电子和热力学性质。这些分子对应于GDB-17化学宇宙中1660亿个有机分子中所有133,885个含有多达9个重原子(CONF)的物种的子集。报告了能量最小的几何,相应的谐波频率,偶极矩,极化率,以及能量,焓,和原子化的自由能。所有性质都是在量子化学的B3LYP/6-31G(2df,p)水平上计算的。此外,对于主要的化学计量,C7H10O2,在134k分子中有6095个组成异构体。在更精确的G4MP2理论水平上报告了所有这些原子化的能量、焓和自由能。因此,该数据集为相关、一致和全面的小有机分子化学空间提供了量子化学性质。该数据库可用于现有方法的基准测试,新方法的开发,如混合量子力学/机器学习,以及结构-性质关系的系统识别。

一些有机分子如下:

数据集中的分子可视化:


文件XYZ格式:

对于每个分子,原子坐标和计算属性存储在名为dataset_index.xyz的文件中。XYZ格式(最初由明尼苏达超级计算机中心为XMol程序开发)是一种广泛使用的纯文本格式,用于编码分子的笛卡尔坐标,没有正式的规范。它包含一个标题行(na)、一个注释行和na行(na行包含元素类型和原子坐标),每行一个原子。我们扩展了这种格式,如表2所示。现在,注释行用于存储所有标量属性

QM9数据提取的特征:

能量最小的几何空间结构、相应的谐波频率、偶极矩、极化率、能量、焓、原子化的自由能等

网络结构的设计

Set2Set的聚合方式:

Set2Set指的是一种序列到序列的一种扩展。许多情况下,可变大小的输入和/或输出可能不会自然地表示为序列,但是有一些数据不是序列形式的,Set2Set可以是从集合到集合。

注意:输出通道数是输入通道数的两倍
q t = L S T M ( q t − 1 ∗ ) α i , t = s o f t m a x ( x i ⋅ q t ) r t = ∑ i = 1 N α i , t x i q t ∗ = q t ∥ r t , \begin{align}\begin{aligned}\mathbf{q}_t &= \mathrm{LSTM}(\mathbf{q}^{*}_{t-1})\\\alpha_{i,t} &= \mathrm{softmax}(\mathbf{x}_i \cdot \mathbf{q}_t)\\\mathbf{r}_t &= \sum_{i=1}^N \alpha_{i,t} \mathbf{x}_i\\\mathbf{q}^{*}_t &= \mathbf{q}_t \, \Vert \, \mathbf{r}_t,\end{aligned}\end{align} qt​αi,t​rt​qt∗​​=LSTM(qt−1∗​)=softmax(xi​⋅qt​)=i=1∑N​αi,t​xi​=qt​∥rt​,​​​

set2set = Set2Set(dim, processing_steps=3)out = self.set2set(out, data.batch)

GRU:
r t = σ ( W i r x t + b i r + W h r h ( t − 1 ) + b h r ) z t = σ ( W i z x t + b i z + W h z h ( t − 1 ) + b h z ) n t = tanh ⁡ ( W i n x t + b i n + r t ∗ ( W h n h ( t − 1 ) + b h n ) ) h t = ( 1 − z t ) ∗ n t + z t ∗ h ( t − 1 ) r_t = \sigma(W_{ir} x_t + b_{ir} + W_{hr} h_{(t-1)} + b_{hr}) \\ z_t = \sigma(W_{iz} x_t + b_{iz} + W_{hz} h_{(t-1)} + b_{hz}) \\ n_t = \tanh(W_{in} x_t + b_{in} + r_t * (W_{hn} h_{(t-1)}+ b_{hn})) \\ h_t = (1 - z_t) * n_t + z_t * h_{(t-1)} rt​=σ(Wir​xt​+bir​+Whr​h(t−1)​+bhr​)zt​=σ(Wiz​xt​+biz​+Whz​h(t−1)​+bhz​)nt​=tanh(Win​xt​+bin​+rt​∗(Whn​h(t−1)​+bhn​))ht​=(1−zt​)∗nt​+zt​∗h(t−1)​

rnn = nn.GRU(10, 20, 2)
input = torch.randn(5, 3, 10)
h0 = torch.randn(2, 3, 20)
output, hn = rnn(input, h0)

官网示例代码注释:

GitHub - pyg-team/pytorch_geometric: Graph Neural Network Library for PyTorch

import os.path as ospimport networkx as nx
import torch
import torch.nn.functional as F
from torch.nn import GRU, Linear, ReLU, Sequentialimport torch_geometric.transforms as T
from torch_geometric.datasets import QM9
from torch_geometric.loader import DataLoader
from torch_geometric.nn import NNConv
from torch_geometric.nn.aggr import Set2Set
from torch_geometric.utils import remove_self_loops, to_networkx
import pylabtarget = 0
dim = 64class MyTransform(object):def __call__(self, data):# Specify target.data.y = data.y[:, target]return dataclass Complete(object):def __call__(self, data):device = data.edge_index.devicerow = torch.arange(data.num_nodes, dtype=torch.long, device=device)col = torch.arange(data.num_nodes, dtype=torch.long, device=device)row = row.view(-1, 1).repeat(1, data.num_nodes).view(-1)col = col.repeat(data.num_nodes)edge_index = torch.stack([row, col], dim=0)edge_attr = Noneif data.edge_attr is not None:idx = data.edge_index[0] * data.num_nodes + data.edge_index[1]size = list(data.edge_attr.size())size[0] = data.num_nodes * data.num_nodesedge_attr = data.edge_attr.new_zeros(size)edge_attr[idx] = data.edge_attredge_index, edge_attr = remove_self_loops(edge_index, edge_attr)data.edge_attr = edge_attrdata.edge_index = edge_indexreturn datapath = osp.join(osp.dirname(osp.realpath(__file__)), '..', 'data', 'QM9')
transform = T.Compose([MyTransform(), Complete(), T.Distance(norm=False)])
dataset = QM9(path, transform=transform).shuffle()# 可视化分子
one_data = dataset[0]
G = to_networkx(one_data)
nx.draw(G)
pylab.show()# Normalize targets to mean = 0 and std = 1.
mean = dataset.data.y.mean(dim=0, keepdim=True)
std = dataset.data.y.std(dim=0, keepdim=True)
dataset.data.y = (dataset.data.y - mean) / std
mean, std = mean[:, target].item(), std[:, target].item()# Split datasets.
test_dataset = dataset[:10000]
val_dataset = dataset[10000:20000]
train_dataset = dataset[20000:]
test_loader = DataLoader(test_dataset, batch_size=128, shuffle=False)
val_loader = DataLoader(val_dataset, batch_size=128, shuffle=False)
train_loader = DataLoader(train_dataset, batch_size=128, shuffle=True)class Net(torch.nn.Module):def __init__(self):super().__init__()self.lin0 = torch.nn.Linear(dataset.num_features, dim)nn = Sequential(Linear(5, 128), ReLU(), Linear(128, dim * dim))self.conv = NNConv(dim, dim, nn, aggr='mean')self.gru = GRU(dim, dim)# Set2Set是一种将集合到集合用LSTM时序模型进行映射的聚合方式,注意out_channels = 2 * in_channelsself.set2set = Set2Set(dim, processing_steps=3)self.lin1 = torch.nn.Linear(2 * dim, dim)self.lin2 = torch.nn.Linear(dim, 1)def forward(self, data):out = F.relu(self.lin0(data.x))h = out.unsqueeze(0)for i in range(3):m = F.relu(self.conv(out, data.edge_index, data.edge_attr))out, h = self.gru(m.unsqueeze(0), h)out = out.squeeze(0)# (2325,64)out = self.set2set(out, data.batch)# (128,128)out = F.relu(self.lin1(out))out = self.lin2(out)return out.view(-1)device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = Net().to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min',factor=0.7, patience=5,min_lr=0.00001)def train(epoch):model.train()loss_all = 0for data in train_loader:data = data.to(device)optimizer.zero_grad()loss = F.mse_loss(model(data), data.y)loss.backward()loss_all += loss.item() * data.num_graphsoptimizer.step()return loss_all / len(train_loader.dataset)def test(loader):model.eval()error = 0for data in loader:data = data.to(device)error += (model(data) * std - data.y * std).abs().sum().item()  # MAEreturn error / len(loader.dataset)best_val_error = None
for epoch in range(1, 301):lr = scheduler.optimizer.param_groups[0]['lr']loss = train(epoch)val_error = test(val_loader)scheduler.step(val_error)if best_val_error is None or val_error <= best_val_error:test_error = test(test_loader)best_val_error = val_errorprint(f'Epoch: {epoch:03d}, LR: {lr:7f}, Loss: {loss:.7f}, 'f'Val MAE: {val_error:.7f}, Test MAE: {test_error:.7f}')

参考:

1、Quantum-Machine.org: Datasets

2、Quantum chemistry structures and properties of 134 kilo molecules (figshare.com)

3、GitHub - pyg-team/pytorch_geometric: Graph Neural Network Library for PyTorch

4、Quantum chemistry structures and properties of 134 kilo molecules | Scientific Data (nature.com)

5、《ORDER MATTERS: SEQUENCE TO SEQUENCE FOR SETS》

6、GRU — PyTorch 1.13 documentation

QM9数据集示例项目学习图神经网络相关推荐

  1. 【图神经网络实战】深入浅出地学习图神经网络GNN(上)

    文章目录 一.图神经网络应用领域 1.1 芯片设计 1.2 场景分析与问题推理 1.3 推荐系统 1.4 欺诈检测与风控相关 1.5 知识图谱 1.6 道路交通的流量预测 1.7 自动驾驶(无人机等场 ...

  2. Datawhale组队学习-图神经网络(五)

    Datawhale组队学习-图神经网络(五) 此内容出自Cluster-GCN的论文:Cluster-GCN: An Efficient Algorithm for Training Deep and ...

  3. Datawhale组队学习-图神经网络(四)

    Datawhale组队学习-图神经网络(四) 数据完全存于内存的数据集类 + 节点预测与边预测任务实践 对于占用内存有限的数据集,我们可以将整个数据集的数据都存储到内存里.PyG为我们提供了方便的方式 ...

  4. Datawhale 6月学习——图神经网络:超大图上的节点表征学习

    前情回顾 图神经网络:图数据表示及应用 图神经网络:消息传递图神经网络 图神经网络:基于GNN的节点表征学习 图神经网络:基于GNN的节点预测任务及边预测任务 1 超大图上的节点表征学习 1.1 简述 ...

  5. 深度学习-强化学习-图神经网络-自然语言处理等AI课程超级大列表-最新版

    本篇文章内容整理自网络,汇集了大量关于深度学习.强化学习.机器学习.计算机视觉.语音识别.强化学习.图神经网络和自然语言处理相关的各种课程.之前分享过一次,经过一年的更新,又补充了很多2019.202 ...

  6. 2020人工智能课程超级大列表:深度学习-强化学习-图神经网络-自然语言处理等...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 本篇博文主要为大家介绍一个课程网站,汇集了机器学习,深度学习.强化学习的各个方面, ...

  7. 学习图神经网络相关内容

    本周学习情况 本周学习任务: 学习图神经网络相关内容 图基本知识(连通分量.度中心性.特征向量中心性.中介中心性.接近中心性.PageRank.HITS)并使用networkx包简单实践. 学习了相关 ...

  8. 【PyG】异构图学习 - 图神经网络

    大量真实世界的数据集被存储为异构图,这促使Pytorch geometry (PyG)中为它们引入了专门的函数.例如,推荐领域中的大多数图,如社交图,都是异构的,因为它们存储关于不同类型实体及其不同类 ...

  9. 组队学习-图神经网络(fifth)

    本文主要分析Cluster-GCN: An Efficient Algorithm for Training Deep and Large Graph Convolutional Network论文中 ...

  10. 图表示学习+图神经网络:破解AI黑盒,揭示万物奥秘的钥匙!

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 从电信网络到社交网络,从经济网络到生物医学网络--图结构的数据无处 ...

最新文章

  1. Java 责任链模式
  2. git——从远程库克隆
  3. dnscat使用——整体感觉这个工具不完善,失败率很高,传文件时候没有完整性校验,我自己测试时通过域名转发失败,可能是其特征过于明显导致...
  4. python功能函数_Python-功能函数的使用
  5. [PAT乙级]1031 查验身份证
  6. ubuntu20有道词典亲测安装记录
  7. Java后端学习体系(韩顺平)
  8. oracle concat和,concat和||之間是否存在性能差異?在oracle
  9. 读《单页web应用》-回顾作用域
  10. JDK8下载安装教程
  11. 维纳滤波 c语言,C版:自适应维纳滤波方法的语音增强(C2-1)
  12. SqlServer——Excel连接数据库相关知识
  13. CSS加粗知识与案例
  14. 关于两仪、三才、四象、五行、六合、七星、八卦、九宫、十方、中医的现代科学猜想全解
  15. DSP程序中常出现的EINT、DINT、ERTM、DRTM、EALLOW、EDIS的理解
  16. 百度竞价软件测试面试,【百度SEM基础试题】百度推广竞价专员基础知识测试
  17. Kali Linux安装2019.2.28
  18. 学习hutool源码TreeUtil.build()得到了什么
  19. hadoop编程实战——日志分析
  20. AM335X 内存配置

热门文章

  1. find命令的prune用法总结
  2. 使用Java8 stream流对获取数据进行分页处理
  3. 【Ubuntu14.04安装】网络初始化配置
  4. DOS命令之cls:清屏
  5. libpng warning: iCCP: known incorrect sRGB profile 报错:解决方法
  6. 第二十天学Python:标准库(4)sys和time、可执行文件
  7. CTF中常见的几种编码
  8. html map 地图热点
  9. java五子棋源代码_五子棋游戏源代码 - javaAPI的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. 惊心动魄-面试经历(转)