我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Pytorch+PyG实现EdgeCNN过程示例详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Pytorch+PyG实现EdgeCNN过程示例详解

1.EdgeCNN简介

EdgeCNN是一种用于图像点云处理的卷积神经网络(Convolutional Neural Network,CNN)模型。与传统的CNN仅能处理图片二维数据不同,EdgeCNN可以对三维点云中每个点周围的局部邻域进行操作,并适用于物体识别、深度估计、自动驾驶等多项任务。

2. 实现步骤

2.1 数据准备

在本实验中,我们使用了一个包含4万个点云的数据集ModelNet10,作为示例。与其它标准图像数据集不同的是,这个数据集中图形的构成量非常大,而且各图之间结构差异很大,因此需要进行大量的预处理工作。

# 导入模型数据集
from torch_geometric.datasets import ModelNet
# 加载ModelNet数据集
dataset = ModelNet(root='./modelnet', name='10')
data = dataset[0]
# 定义超级参数
num_points = 1024
batch_size = 32
train_dataset_size = 8000
# 将数据集分割成训练、验证及测试三个数据集
train_dataset = data[0:train_dataset_size]
val_dataset = data[train_dataset_size: 9000]
test_dataset = data[9000:]
# 定义数据加载批处理器
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=batch_size, shuffle=False)
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)

通过上述代码,我们先是导入ModelNet数据集并将其分割成训练、验证及测试三个数据集,并创建了数据加载批处理器,以便于在训练过程中对这些数据进行有效的处理。

2.2 实现模型

在定义EdgeCNN模型时,我们需要根据图像点云经常使用的架构定义网络结构。同时,在实现卷积操作时应引入相应的邻域信息,来使得网络能够学习到系统中附近点之间的关系。

from torch.nn import Sequential as Seq, Linear as Lin, ReLU
from torch_geometric.nn import EdgeConv, global_max_pool
class EdgeCNN(torch.nn.Module):
    def __init__(self, dataset):
        super(EdgeCNN, self).__init__()
        # 定义基础参数
        self.input_dim = dataset.num_features
        self.output_dim = dataset.num_classes
        self.num_points = num_points
        # 定义模型结构
        self.conv1 = EdgeConv(Seq(Lin(self.input_dim, 32), ReLU()))
        self.conv2 = EdgeConv(Seq(Lin(32, 64), ReLU()))
        self.conv3 = EdgeConv(Seq(Lin(64, 128), ReLU()))
        self.conv4 = EdgeConv(Seq(Lin(128, 256), ReLU()))
        self.fc1 = torch.nn.Linear(256, 1024)
        self.fc2 = torch.nn.Linear(1024, self.output_dim)
    def forward(self, pos, batch):
        # 构造图
        edge_index = radius_graph(pos, r=0.6, batch=batch, loop=False)
        # 第一层CNN模型的卷积 + 池化处理
        x = F.relu(self.conv1(x=pos, edge_index=edge_index))
        x = global_max_pool(x, batch)
        # 第二层CNN模型的卷积 + 池化处理
        edge_index = radius_graph(x, r=0.9, batch=batch, loop=False)
        x = F.relu(self.conv2(x=x, edge_index=edge_index))
        x = global_max_pool(x, batch)
        # 第三层CNN模型的卷积 + 池化处理
        edge_index = radius_graph(x, r=1.2, batch=batch, loop=False)
        x = F.relu(self.conv3(x=x, edge_index=edge_index))
        x = global_max_pool(x, batch)
        # 第四层CNN模型的卷积 + 池化处理
        edge_index = radius_graph(x, r=1.5, batch=batch, loop=False)
        x = F.relu(self.conv4(x=x, edge_index=edge_index))
        # 定义全连接网络
        x = global_max_pool(x, batch)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return F.log_softmax(x, dim=-1)

在上述代码中,实现了基于EdgeCNN的模型的各个卷积层和全连接层,并使用radius_graph等函数将局部区域问题归约到定义的卷积核检测范围之内,以便更好地对点进行分析和特征提取。最后结合全连接层输出一个维度为类别数的向量,并通过softmax函数来计算损失。

2.3 模型训练

在定义好EdgeCNN网络结构之后,我们还需要指定合适的优化器、损失函数,并控制训练轮数、批大小与学习率等超参数。同时也需要记录大量日志信息,方便后期跟踪及管理。

# 定义训练计划,包括损失函数、优化器及迭代次数等
train_epochs = 50
learning_rate = 0.01
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(edge_cnn.parameters(), lr=learning_rate)
losses_per_epoch = []
accuracies_per_epoch = []
for epoch in range(train_epochs):
    running_loss = 0.0
    running_corrects = 0.0
    count = 0.0
    for samples in train_loader:
        optimizer.zero_grad()
        pos, batch, label = samples.pos, samples.batch, samples.y.to(torch.long)
        out = edge_cnn(pos, batch)
        loss = criterion(out, label)
        loss.backward()
        optimizer.step()
        running_loss += loss.item() / len(train_dataset)
        running_corrects += torch.sum(torch.argmax(out, dim=1) == label).item() / len(train_dataset)
        count += 1
    losses_per_epoch.append(running_loss)
    accuracies_per_epoch.append(running_corrects)
    if (epoch + 1) % 5 == 0:
        print("Train Epoch {}/{} Loss {:.4f} Accuracy {:.4f}".format(
            epoch + 1, train_epochs, running_loss, running_corrects))

在训练过程中,我们遍历每个batch,通过反向传播算法进行优化,并更新loss及accuracy输出。同时,为了方便可视化与记录,需要将训练过程中的loss和accuracy输出到相应的容器中,以便后期进行分析和处理。

以上就是Pytorch+PyG实现EdgeCNN过程示例详解的详细内容,更多关于Pytorch PyG实现EdgeCNN的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Pytorch+PyG实现EdgeCNN过程示例详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Pytorch+PyG实现EdgeCNN过程示例详解

这篇文章主要为大家介绍了Pytorch+PyG实现EdgeCNN过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-17

Pytorch+PyG实现GraphSAGE过程示例详解

这篇文章主要为大家介绍了Pytorch+PyG实现GraphSAGE过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-17

Pytorch+PyG实现GraphConv过程示例详解

这篇文章主要为大家介绍了Pytorch+PyG实现GraphConv过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-17

详解Pytorch+PyG实现GAT过程示例

这篇文章主要为大家介绍了Pytorch+PyG实现GAT过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-17

详解Pytorch+PyG实现GCN过程示例

这篇文章主要为大家介绍了Pytorch+PyG实现GCN过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-17

Pytorch+PyG实现GIN过程示例详解

这篇文章主要为大家介绍了Pytorch+PyG实现GIN过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-17

Pytorch结合PyG实现MLP过程详解

这篇文章主要为大家介绍了Pytorch结合PyG实现MLP过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-17

使用Pytorch+PyG实现MLP的详细过程

图神经网络是最近AI领域最热门的方向之一,下面这篇文章主要给大家介绍了关于使用Pytorch+PyG实现MLP的详细过程,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-03-03

基于Pytorch实现分类器的示例详解

这篇文章主要为大家详细介绍了如何基于Pytorch实现两个分类器: softmax分类器和感知机分类器,文中的示例代码讲解详细,需要的可以参考一下
2023-05-16

如何从PyTorch中获取过程特征图实例详解

特征提取是图像处理过程中常需要用到的一种方法,其效果好坏对模型的泛化能力有至关重要的影响,下面这篇文章主要给大家介绍了关于如何从PyTorch中获取过程特征图的相关资料,需要的朋友可以参考下
2023-01-10

Pytorch复现扩散模型的示例详解

这篇文章主要为大家详细介绍了如何利用Pytorch复现扩散模型,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以跟随小编一起了解一下
2023-05-17

PyTorch模型转换为ONNX格式实现过程详解

这篇文章主要为大家介绍了PyTorch模型转换为ONNX格式实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-17

一文详解Canvas实现打飞字游戏过程示例

这篇文章主要为大家介绍了Canvas实现打飞字游戏示例过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-14

JS实现一个微信录音功能过程示例详解

这篇文章主要介绍了JS实现一个微信录音功能过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-21

Pytorch自定义CNN网络实现猫狗分类详解过程

PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。它不仅能够实现强大的GPU加速,同时还支持动态神经网络。本文将介绍PyTorch自定义CNN网络实现猫狗分类,感兴趣的可以学习一下
2022-12-08

k8s部署redis集群实现过程实例详解

这篇文章主要为大家介绍了k8s部署redis集群实现过程实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录