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 #…

uView Badge 徽标数

该组件一般用于图标右上角显示未读的消息数量&#xff0c;提示用户点击&#xff0c;有圆点和圆包含文字两种形式。 #平台差异说明 App&#xff08;vue&#xff09;App&#xff08;nvue&#xff09;H5小程序√√√√ #基本使用 通过value参数定义徽标内容通过type设置主题。重…

【教你如何制作一个简单的HTML个人网页】

制作一个简单的HTML个人网页 创建一个简单个人的HTML网页很容易&#xff0c;下面是一个基本的示例&#xff0c;其中包含一些常见的元素&#xff0c;比如标题、段落、一张图片和一些链接&#xff0c;请记住&#xff0c;您将需要一个地方来存储您的HTML文件和任何相关资源&#…

电子商务类网站搭建需要注意的几点。

随着电子商务的迅猛发展&#xff0c;越来越多的企业和创业者选择在互联网上开设自己的电商网站。为了确保电商网站能够高效运行&#xff0c;给用户提供良好的体验&#xff0c;选择合适的服务器配置至关重要。 一、硬件配置 1、 CPU&#xff08;中央处理器&#xff09; 电商网…

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

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

vue01

一、什么是vue.js&#xff08;单页面应用程序&#xff09; 用于构建用户界面的渐进式框架&#xff0c;采用自底向上增量开发的设计。核心理念&#xff1a;数据驱动视图&#xff0c;组件化开发前端三大主流框架&#xff1a;Vue.js Angular.js React.js 二、为什么学习流行框架…

1060:均值

【题目描述】 给出一组样本数据&#xff0c;包含n个浮点数&#xff0c;计算其均值&#xff0c;精确到小数点后4位。 【输入】 输入有两行&#xff0c;第一行包含一个整数n&#xff08;n小于100&#xff09;&#xff0c;代表样本容量&#xff1b;第二行包含n个绝对值不超过10…

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

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

Debian时间和时区配置

1. 时区 1.1. 查看时区 timedatectl输出 Local time: Thu 2024-03-07 13:46:06 CSTUniversal time: Thu 2024-03-07 05:46:06 UTCRTC time: Thu 2024-03-07 05:46:06Time zone: Asia/Shanghai (CST, 0800) System clock synchronized: yesNTP service: activeRTC in local TZ…

面试十一、代理模式

代理模式是一种结构型设计模式&#xff0c;旨在为其他对象提供一种代理或替代方法&#xff0c;以控制对这些对象的访问。在代理模式中&#xff0c;代理对象充当了客户端和目标对象之间的中间人&#xff0c;客户端通过代理访问目标对象&#xff0c;而不直接访问目标对象。 代理模…

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

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

Oracle中全表扫描优化方法

在Oracle数据库中&#xff0c;全表扫描&#xff08;Full Table Scan, FTS&#xff09;是指查询执行时扫描表的所有数据块来获取结果集。虽然在某些场景下全表扫描可能是最优选择&#xff08;例如&#xff1a;当需要访问大部分或全部数据、表很小或者索引访问成本高于全表扫描时…

MKdocs博客中文教程 - 已经整理到知乎专栏

MKdocs博客中文教程 - 知乎 Mkdocs-Wcowin中文主题 通过主题和目录以打开文章 基于Material for MkDocs美化简洁美观&#xff0c;功能多元化简单易上手&#xff0c;小白配置教程详细&#xff0c;清晰易懂

html5cssjs代码 035 课程表

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

C++基础之运算符重载续(十三)

一.函数调用运算符 我们知道&#xff0c;普通函数执行时&#xff0c;有一个特点就是无记忆性&#xff0c;一个普通函数执行完毕&#xff0c;它所在的函数栈空间就会被销毁&#xff0c;所以普通函数执行时的状态信息&#xff0c;是无法保存下来的&#xff0c;这就让它无法应用在…

python实现 linux 执行命令./test启动进程,进程运行中,输入参数s, 再输入参数1, 再输入参数exit, 获取进程运行结果重定向写入到文件

要在 Python 中实现执行 ./test 启动进程&#xff0c;并在进程运行中依次输入参数 s、1&#xff0c;最后输入参数 exit&#xff0c;并将进程的输出结果重定向写入到文件&#xff0c;你可以使用 subprocess 模块。以下是一个示例代码&#xff1a; import subprocess# 启动 test…

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; …