RIPGeo代码理解(四)model.py( RIPGeo的核心源代码)

 代码链接:RIPGeo代码实现

├── lib # 包含模型(model)实现文件
    │        |── layers.py # 注意力机制的代码。
    │        |── model.py # TrustGeo的核心源代码。
    │        |── sublayers.py # layer.py的支持文件。
    │        |── utils.py # 辅助函数。

一、导入各种模块和神经网络类

from .layers import *
import torch
import torch.nn as nn

这段代码是一个 Python 模块,包含了一些导入语句和定义了一个神经网络模型的类。

from .layers import *:导入了当前模块所在目录中的 layers 模块中的所有内容。* 表示导入所有的内容。

二、RIPGeo类定义(NN模型)

class RIPGeo(nn.Module):def __init__(self, dim_in, dim_z, dim_med, dim_out, collaborative_mlp=True):super(RIPGeo, self).__init__()# RIPGeoself.att_attribute = SimpleAttention1(temperature=dim_z ** 0.5,d_q_in=dim_in,d_k_in=dim_in,d_v_in=dim_in + 2,d_q_out=dim_z,d_k_out=dim_z,d_v_out=dim_z)if collaborative_mlp:self.pred = SimpleAttention2(temperature=dim_z ** 0.5,d_q_in=dim_in * 3 + 4,d_k_in=dim_in,d_v_in=2,d_q_out=dim_z,d_k_out=dim_z,d_v_out=2,drop_last_layer=False)else:self.pred = nn.Sequential(nn.Linear(dim_z, dim_med),nn.ReLU(),nn.Linear(dim_med, dim_out))self.collaborative_mlp = collaborative_mlp# calculate Aself.gamma_1 = nn.Parameter(torch.ones(1, 1))self.gamma_2 = nn.Parameter(torch.ones(1, 1))self.gamma_3 = nn.Parameter(torch.ones(1, 1))self.alpha = nn.Parameter(torch.ones(1, 1))self.beta = nn.Parameter(torch.zeros(1, 1))# transform in Graphself.w_1 = nn.Linear(dim_in + 2, dim_in + 2)self.w_2 = nn.Linear(dim_in + 2, dim_in + 2)def forward(self, lm_X, lm_Y, tg_X, tg_Y, lm_delay, tg_delay):""":param lm_X: feature of landmarks [..., 30]: 14 attribute + 16 measurement:param lm_Y: location of landmarks [..., 2]: longitude + latitude:param tg_X: feature of targets [..., 30]:param tg_Y: location of targets [..., 2]:param lm_delay: delay from landmark to the common router [..., 1]:param tg_delay: delay from target to the common router [..., 1]:return:"""N1 = lm_Y.size(0)N2 = tg_Y.size(0)ones = torch.ones(N1 + N2 + 1).cuda()lm_feature = torch.cat((lm_X, lm_Y), dim=1)tg_feature_0 = torch.cat((tg_X, torch.zeros(N2, 2).cuda()), dim=1)router_0 = torch.mean(lm_feature, dim=0, keepdim=True)all_feature_0 = torch.cat((lm_feature, tg_feature_0, router_0), dim=0)'''star-GNNproperties:1. single directed graph: feature of <landmarks> will never be updated.2. the target IP will receive from surrounding landmarks from two ways: (1) attribute similarity-based one-hop propagation;(2) delay measurement-based two-hop propagation via the common router;'''# GNN-step 1adj_matrix_0 = torch.diag(ones)delay_score = torch.exp(-self.gamma_1 * (self.alpha * lm_delay + self.beta))rou2tar_score_0 = torch.exp(-self.gamma_2 * (self.alpha * tg_delay + self.beta)).reshape(N2)# feature_, attribute_score = self.att_attribute(tg_X, lm_X, lm_feature)attribute_score = torch.exp(attribute_score)adj_matrix_0[N1:N1 + N2, :N1] = attribute_scoreadj_matrix_0[-1, :N1] = delay_scoreadj_matrix_0[N1:N1 + N2:, -1] = rou2tar_score_0degree_0 = torch.sum(adj_matrix_0, dim=1)degree_reverse_0 = 1.0 / degree_0degree_matrix_reverse_0 = torch.diag(degree_reverse_0)degree_mul_adj_0 = degree_matrix_reverse_0 @ adj_matrix_0step_1_all_feature = self.w_1(degree_mul_adj_0 @ all_feature_0)tg_feature_1 = step_1_all_feature[N1:N1 + N2, :]router_1 = step_1_all_feature[-1, :].reshape(1, -1)# GNN-step 2adj_matrix_1 = torch.diag(ones)rou2tar_score_1 = torch.exp(-self.gamma_3 * (self.alpha * tg_delay + self.beta)).reshape(N2)adj_matrix_1[N1:N1 + N2:, -1] = rou2tar_score_1all_feature_1 = torch.cat(

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

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

相关文章

六种GPU虚拟化:除了直通、全虚拟化 (vGPU)还有谁?

在大类上计算虚拟化技术有这3种&#xff1a; 软件模拟、直通独占(如网卡独占、显卡独占)、直通共享&#xff08;如vCPU 、vGPU&#xff09;。但对于显卡GPU而言我总结细化出至少这6种分类&#xff1a; 第一种、软件模拟&#xff08;eg sGPU&#xff09;, 又叫半虚拟化。第二种…

RIPGeo代码理解(三)layers.py(注意力机制的代码)

代码链接:RIPGeo代码实现 ├── lib # 包含模型(model)实现文件 │ |── layers.py # 注意力机制的代码。 │ |── model.py # TrustGeo的核心源代码。 │ |── sublayers.py # layer.py的支持文件。 │ |── utils.py #…

STM32CubeMX学习笔记23---FreeRTOS(任务的挂起与恢复)

1、硬件设置 本实验通过freertos创建两个任务来分别控制LED2和LED3的亮灭&#xff0c;需要用到的硬件资源 LED2和LED3指示灯串口 2、STM32CubeMX设置 根据上一章的步骤创建两个任务&#xff1a;STM32CubeMX学习笔记22---FreeRTOS&#xff08;任务创建和删除&#xff09;-CS…

FPGA - SPI总线介绍以及通用接口模块设计

一&#xff0c;SPI总线 1&#xff0c;SPI总线概述 SPI&#xff0c;是英语Serial Peripheral interface的缩写&#xff0c;顾名思义就是串行外围设备接口。串行外设接口总线(SPI)&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的…

【C++】为什么vector的地址与首元素地址不同?

文章目录 一、问题发现&#xff1a;二、结果分析三、问题解析 一、问题发现&#xff1a; &vector和&vector[0]得到的两个地址居然不相同&#xff0c;对数组array取变量名地址和取首元素地址的结果是相同的。这是为啥呢&#xff1f; 使用下面代码进行验证&#xff1a;…

html5cssjs代码 035 课程表

html5&css&js代码 035 课程表 一、代码二、解释基本结构示例代码常用属性样式和装饰响应式表格辅助技术 一个具有亮蓝色背景的网页&#xff0c;其中包含一个样式化的表格用于展示一周课程安排。表格设计了交替行颜色、鼠标悬停效果以及亮色表头&#xff0c;并对单元格设…

MoonBit 首场 MeetUp 活动火热报名中!更多活动惊喜等你来探索!

首场线下MeetUp来啦&#xff01; 在数字化浪潮中&#xff0c;基础软件构筑了信息产业发展的根基&#xff0c;不仅是技术进步的支柱&#xff0c;也是推动经济增长的重要力量。基础软件的发展不仅关乎硬件的完善与应用软件的创新&#xff0c;更是连接过去与未来的桥梁。 尽管中国…

Docker容器化技术(docker-compose安装部署案例)

docker-compose编排工具 安装docker-compose [rootservice ~]# systemctl stop firewalld [rootservice ~]# setenforce 0 [rootservice ~]# systemctl start docker[rootservice ~]# wget https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-…

anaconda迁移深度学习虚拟环境 在云服务器上配置

1 anaconda 虚拟环境操作 1、 查看虚拟环境 conda info -e2、 创建新的虚拟环境 conda create -n deeplearning_all pip python3.63、 激活新建的虚拟环境 Conda activate deeplearning_all2 环境中相关库的版本即安装说明&#xff08;这些库都是对应匹配的&#xff09; …

Lenze伦茨8400变频器E84A L-force Drives 操作使用说明

Lenze伦茨8400变频器E84A L-force Drives 操作使用说明

跟selenium并肩的自动化神器 Playwright 的 Web 自动化测试解决方案

1. 主流框架的认识 总结&#xff1a; 由于Selenium在3.x和4.x两个版本的迭代中并没有发生多大的变化&#xff0c;因此Selenium一统天下的地位可能因新框架的出现而变得不那么稳固。后续的Cypress、TestCafe、Puppeteer被誉为后Selenium时代Web UI自动化的三驾马车。但是由于这三…

JavaEE 初阶篇-深入了解操作系统中的进程与 PCB

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 关于计算机是如何进行工作的 “常识” 1.1 关于寄存器、缓存与内存是如何配合 CPU “工作” 2.0 操作系统概述 2.1 操作系统内核 2.2 进程 2.3 PCB 2.3.1 PCB 属性…

Centos7没有可用软件包 ifconfig问题解决

问题描述 在Centos7中查看ip没有ifconfig&#xff0c;使用yum安装ifconfig报错没有可用软件包 ifconfig问题解决 [rootlocalhost etc]# yum -y install ifconfig 已加载插件&#xff1a;fastestmirror base …

动手做简易版俄罗斯方块

导读&#xff1a;让我们了解如何处理形状的旋转、行的消除以及游戏结束条件等控制因素。 目录 准备工作 游戏设计概述 构建游戏窗口 游戏方块设计 游戏板面设计 游戏控制与逻辑 行消除和计分 判断游戏结束 界面美化和增强体验 看看游戏效果 准备工作 在开始编码之前…

火灾自动报警及消防联动控制系统主机的九个主要组成部分

关于火灾报警联动系统的主机组成&#xff0c;一般有两种不同的概括&#xff0c;下面分别讨论。 一&#xff1a; 火灾报警主机的组成部分较多&#xff0c;主要包括以下消防设备&#xff1a;主电源、联动电源、打印机、驱动器、直接控制板、总线控制板、消防广播、消防电话主机…

粒子群算法 - 目标函数最优解计算

粒子群算法概念 粒子群算法 (particle swarm optimization&#xff0c;PSO) 由 Kennedy 和 Eberhart 在 1995 年提出&#xff0c;该算法模拟鸟群觅食的方法进行寻找最优解。基本思想&#xff1a;人们发现&#xff0c;鸟群觅食的方向由两个因素决定。第一个是自己当初飞过离食物…

FPGA工程正确的设计流程

1 正确的设计流程 分析项目的具体需求来设计系统的结构&#xff0c;划分系统的层次&#xff0c;确定各个子模块的结构关系和信号之间的相互关系&#xff0c;然后确定模块的端口信号等根据每隔模块的功能和自己的理解&#xff0c;结合芯片手册接口的时序&#xff0c;使用visio画…

基于QGraphicsView的图像显示控件,支持放大、缩小、鼠标拖动

原链接 前言 这是一个Qt平台的基于QGraphicsView类的图像显示控件&#xff0c;支持输入QPixmap、QImage、opencv的从cv::Mat类。 实现平台&#xff1a;Windows 10 x64 Qt 6.2.3 MSVC 2019 opencv 4.5 先来看演示视频 控件类实现 ImageViewer.h文件 #ifndef IMAGEVIEWER…

Docker 笔记(八)--Dockerfile

目录 1. 背景2. 参考3. 原文3.1 Dockerfile 支持的指令3.2 Dockerfile格式3.3 Parser指令syntaxescape 3.4 环境变量替换3.5 docker构建忽略文件3.6 Shell 和 exec 格式Exec 格式Shell 格式使用不同的 shell 3.7 FROM指令了解ARG和FROM如何交互 3.8 RUN指令RUN指令缓存失效RUN …

4 CUDA 环境搭建

4.1 简介 本章面向从未接触过CUDA的初学者。我们将依次介绍如何在不同操作系统上安装CUDA、有哪些可用的CUDA 工具以及CUDA如何编译代码&#xff0c;最后介绍应用程序接口提供的错误处理手段&#xff0c;并帮助读者识别CUDA代码和开发过程中必然碰到的应用程序接口报错。Windo…