使用DeeperGCN训练和测试SEED数据集

文章介绍了一个用PyTorch实现的ECG_DeeperGCNs模型,该模型基于图神经网络(GENConv)进行心电图数据的分析。模型包含多层DeepGCNLayer,用于学习节点特征,并使用Adam优化器和交叉熵损失函数进行训练。代码还定义了训练和测试过程,以及数据加载器。模型在SEED数据集上进行训练和评估。
# -*- coding: utf-8 -*-
#
# Copyright (C) 2022 Emperor_Yang, Inc. All Rights Reserved 
#
# @CreateTime    : 2023/2/9 22:12
# @Author        : Emperor_Yang 
# @File          : ECG_DeepGCNs.py
# @Software      : PyCharm

import torch
from torch.nn import ReLU
from easydict import EasyDict
from torch_geometric.nn import GENConv, LayerNorm, DeepGCNLayer, global_add_pool
from torch_geometric.data import DataLoader
from data_process.seed_loader_gnn_memory import SeedGnnMemoryDataset

config = EasyDict()
config.learn_rate = 0.01
config.epoch = 5
config.note_feature_dim = 5
config.note_num = 62
config.hidden_channels = 16
config.class_num = 3
config.hidden_layers = 2
config.batch_size = 16
config.max_loss_increase_time = 3


class ECG_DeeperGCNs(torch.nn.Module):
    """
    GCN handle ECG
    """

    def __init__(self, in_channels, hidden_channels, out_channels):
        super(ECG_DeeperGCNs, self).__init__(
数据集训练测试过程中,使用加密相关的参数(如 `seed` `initialization vector (IV)`)通常是为了确保数据处理过程的可重复性安全性。以下是一个典型的实现方式,其中涉及随机种子(`seed`)用于控制随机性,以及初始化向量(`IV`)用于加密或解密操作。 ### 数据集划分与随机种子设置 ```python import torch import numpy as np from torch.utils.data import DataLoader, random_split # 设置随机种子以保证实验的可重复性 def set_seed(seed): torch.manual_seed(seed) torch.cuda.manual_seed_all(seed) np.random.seed(seed) torch.backends.cudnn.deterministic = True set_seed(42) # 使用固定的 seed 值 # 加载数据集 dataset = YourDataset() # 替换为实际的数据集类 train_size = int(0.8 * len(dataset)) test_size = len(dataset) - train_size train_dataset, test_dataset = random_split(dataset, [train_size, test_size]) # 创建 DataLoader train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True) test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False) ``` ### 加密操作中的 IV 实现 ```python from Crypto.Cipher import AES from Crypto.Random import get_random_bytes # 生成 16 字节的 IV iv = get_random_bytes(16) # 初始化 AES 加密器 cipher = AES.new(key=get_random_bytes(32), mode=AES.MODE_CBC, iv=iv) # 示例加密函数 def encrypt_data(data, cipher): # 确保数据长度是块大小的倍数 padding_length = 16 - (len(data) % 16) data += bytes([padding_length]) * padding_length ciphertext = cipher.encrypt(data) return ciphertext # 示例解密函数 def decrypt_data(ciphertext, cipher): plaintext = cipher.decrypt(ciphertext) padding_length = plaintext[-1] plaintext = plaintext[:-padding_length] return plaintext ``` ### 在训练测试中结合 seed 与 IV 在某些应用场景中,例如隐私保护学习(privacy-preserving machine learning),可能需要将加密机制集成到数据预处理流程中。此时可以将 `seed` 用于数据分割增强的随机控制,而 `IV` 则用于数据加密,确保数据在传输或存储过程中的安全性。 ```python # 将 seed IV 结合使用的示例 class EncryptedDataLoader: def __init__(self, dataloader, cipher): self.dataloader = dataloader self.cipher = cipher def __iter__(self): for inputs, targets in self.dataloader: # 对输入数据进行加密 encrypted_inputs = [encrypt_data(input.tobytes(), self.cipher) for input in inputs.numpy()] yield torch.from_numpy(np.array(encrypted_inputs)), targets # 使用加密后的数据加载器 encrypted_train_loader = EncryptedDataLoader(train_loader, cipher) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KPer_Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值