RIPGeo代码理解(五)utils.py( 辅助函数)第二部分

news/2024/5/20 10:37:34 标签: 聚类, 深度学习, pytorch

 

 代码链接:RIPGeo代码实现

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

五、MaxMinLogRTTScaler()类定义

class MaxMinLogRTTScaler():
    def __init__(self):
        self.min = 0.
        self.max = 1.

    def transform(self, data):
        data_o = np.array(data)
        data_o = np.log(data_o + 1)
        return (data_o - self.min) / (self.max - self.min)

这是一个最大最小归一化和对数变换的类,用于对输入数据进行预处理。这个类的实例可以用于对RTT(Round-Trip Time)等数据进行预处理,使其适用于某些需要输入在固定范围内的模型。

分为几个部分展开描述:

(一)__init__()

def __init__(self):
    self.min = 0.
    self.max = 1.

这是一个简单的类的初始化方法 __init__,主要功能是为类的实例对象设置初始属性值。

1、self.min = 0.: 创建一个实例变量 min 并将其设置为 0.,这里 0. 表示浮点型的零。
2、self.max = 1.: 创建一个实例变量 max 并将其设置为 1.,同样是浮点型的一。

(二)transform()

def transform(self, data):
    data_o = np.array(data)
    data_o = np.log(data_o + 1)
    return (data_o - self.min) / (self.max - self.min)

这段代码的功能是将输入的数据进行对数转换,然后进行最小-最大归一化。这样的操作常用于将数据缩放到一个较小的范围,使其更适合训练或输入到某些机器学习模型中。这种缩放方法用于将数据缩放到指定的范围,是[0, 1]。

1、data_o = np.array(data):将输入的data转换为NumPy数组,并将结果存储在data_o中。

2、data_o = np.log(data_o + 1):对data_o中的每个元素取对数,这里使用的是自然对数(以e为底)。+ 1 是为了避免对0取对数。

3、return (data_o - self.min) / (self.max - self.min):对处理后的数据进行归一化操作。self.minself.max是归一化的范围,这两个值可能是预先计算得到的或者是通过其他方式确定的。这里使用的是最小-最大归一化方法,即减去最小值然后除以范围(最大值减最小值)。最终,函数返回归一化后的结果。

六、MaxMinRTTScaler()类定义

class MaxMinRTTScaler():
    def __init__(self):
        self.min = 0.
        self.max = 1.

    def transform(self, data):
        data_o = np.array(data)
        # data_o = np.log(data_o + 1)
        return (data_o - self.min) / (self.max - self.min)

这是一个用于进行最大-最小缩放(Max-Min Scaling)的类。这种缩放方法用于将数据缩放到指定的范围,通常是[0, 1]。

相比于第五部分(MaxMinLogRTTScaler类定义,缺少对数化操作,其他的一样。

七、MaxMinLogScaler()类定义

class MaxMinLogScaler():
    def __init__(self):
        self.min = 0.
        self.max = 1.

    def transform(self, data):
        data[data != 0] = -np.log(data[data != 0] + 1)
        max = torch.from_numpy(self.max).type_as(data).to(data.device) if torch.is_tensor(data) else self.max
        min = torch.from_numpy(self.min).type_as(data).to(data.device) if torch.is_tensor(data) else self.min
        data[data != 0] = (data[data != 0] - min) / (max - min)
        return data

    def inverse_transform(self, data):
        max = torch.from_numpy(self.max).type_as(data).to(data.device) if torch.is_tensor(data) else self.max
        min = torch.from_numpy(self.min).type_as(data).to(data.device) if torch.is_tensor(data) else self.min
        data = data * (max - min) + min
        return np.exp(data)

这是一个实现最大最小对数缩放(Max-Min Log Scaling)的类,主要用于处理数据的缩放和反缩放。该类的目的是确保数据在缩放和反缩放时能够得到合适的转换,避免由于极端值或零值导致的不稳定情况。

分为几个部分展开描述:

(一)__init__()

def __init__(self):
    self.min = 0.
    self.max = 1.

初始化方法,设置缩放的最小值和最大值,默认为 0 和 1。

(二)transform()

def transform(self, data):
    data[data != 0] = -np.log(data[data != 0] + 1)
    max = torch.from_numpy(self.max).type_as(data).to(data.device) if torch.is_tensor(data) else self.max
    min = torch.from_numpy(self.min).type_as(data).to(data.device) if torch.is_tensor(data) else self.min
    data[data != 0] = (data[data != 0] - min) / (max - min)
    return data

数据缩放方法。对于输入的数据 data,首先对非零元素取对数,然后进行最大最小缩放,将数据映射到 [0, 1] 的范围内。

1、data[data != 0] = -np.log(data[data != 0] + 1)对数据中非零元素取对数的操作。首先,data != 0 会生成一个布尔掩码,表示数据中非零的位置。然后,对这些非零的元素执行 -np.log(data[data != 0] + 1),将其取对数并取负值,最终将结果赋值给原数据中非零的位置。这个操作通常用于对数据进行对数缩放,可以使原始数据中的大数值范围缩小,便于模型训练。

2、max = torch.from_numpy(self.max).type_as(data).to(data.device) if torch.is_tensor(data) else self.max:将 self.max 转换为与输入数据 data 类型一致的张量,并移动到与输入数据相同的设备(GPU 或 CPU)。这里做了类型和设备的匹配以确保后续的操作在相同的环境下进行。

3、min = torch.from_numpy(self.min).type_as(data).to(data.device) if torch.is_tensor(data) else self.min:将 self.min 转换为与输入数据 data 类型一致的张量,并移动到与输入数据相同的设备。

4、data[data != 0] = (data[data != 0] - min) / (max - min):对数据中非零元素进行归一化操作。首先,data[data != 0] 会获取数据中非零元素的数组。然后,对这些非零元素执行归一化操作,减去最小值 min 并除以范围 (max - min)最终,将归一化后的值赋值给原数据中非零的位置。

(三)inverse_transform()

def inverse_transform(self, data):
    max = torch.from_numpy(self.max).type_as(data).to(data.device) if torch.is_tensor(data) else self.max
    min = torch.from_numpy(self.min).type_as(data).to(data.device) if torch.is_tensor(data) else self.min
    data = data * (max - min) + min
    return np.exp(data)

这段代码实现了一个反向变换(inverse transform)的函数,主要用于将经过某种归一化处理的数据反向还原到原始数据的范围。目的是将经过某种归一化处理的数据还原到原始的数值范围,以便进行后续的分析或应用。

1、max = torch.from_numpy(self.max).type_as(data).to(data.device) if torch.is_tensor(data) else self.max:将保存的最大值 self.max 转换为PyTorch张量,并确保其与输入数据 data 的数据类型一致。如果 data 是PyTorch张量,将张量移动到与 data 相同的设备(device)上。

2、min = torch.from_numpy(self.min).type_as(data).to(data.device) if torch.is_tensor(data) else self.min


http://www.niftyadmin.cn/n/5456365.html

相关文章

#Linux(SSH软件安装及简单使用)

(一)发行版:Ubuntu16.04.7 (二)记录: (1)终端键入(root权限)安装 apt-get install openssh-server 安装时遇到报错 E: Could not get lock /var/lib/dpkg/…

拥有超小型领先工艺射频微波电子元器件厂商兆讯授权世强硬创代理

射频前端芯片在模拟芯片中,属于进入门槛较高、设计难度较大的细分领域,由于国内射频前端芯片行业起步较晚,其市场份额主要被外企所占据,而在国产化浪潮的推动下,上游厂商的射频前端产品及技术逐渐具备领先的竞争优势。…

TBSI模型论文解读及代码分析

前往我的主页以获得更好的阅读体验 简介 论文来源: Bridging Search Region Interaction With Template for RGB-T Tracking 现有的搜索算法通常会直接连接 RGB 和 T 模态搜索区域, 该方法存在大量冗余背景噪声. 而另一些方法从搜索帧中采样候选框, 对孤立的 RGB 框和 T 框进…

【数据结构与算法】快速排序(详解:快排的Hoare原版,挖坑法和双指针法|避免快排最坏时间复杂度的两种解决方案|小区间优化|非递归的快排)

引言 快速排序作为交换排序的一种,在排序界的影响力毋庸置疑,我们C语言中用的qsort,C中用的sort,底层的排序方式都是快速排序。相比于同为交换排序的冒泡,其效率和性能就要差的多了,本篇博客就是要重点介绍…

2024.3.28abc晚训题解

VJ晚训网址点击传送晚训 A题 比较巧的输入方式就是循环n&#xff0c;内层套一个循环7 #include<bits/stdc.h> using namespace std; int main(){int n;cin>>n;for(int i1;i<n;i){int ans0;for(int j1;j<7;j){int x;cin>>x;ansansx; }cout<<ans…

妙手ERP正式接入俄罗斯电商平台wildberries,支持高效上货、批量订单处理!

近几年&#xff0c;俄罗斯电商市场高速增长&#xff0c;放眼未来&#xff0c;这样的增长还将持续。根据Statista预测&#xff0c;到2027年俄罗斯电商市场规模将达到15万亿卢布&#xff0c;俄罗斯电商市场发展仍有广阔的发展空间。 来源&#xff1a;Statista 核心电商平台的发展…

Vue类与样式绑定,深入理解

Class 与 Style 绑定 数据绑定的一个常见需求场景是操纵元素的 CSS class 列表和内联样式。因为 class 和 style 都是 attribute&#xff0c;我们可以和其他 attribute 一样使用 v-bind 将它们和动态的字符串绑定。但是&#xff0c;在处理比较复杂的绑定时&#xff0c;通过拼接…

蚂蚁庄园今日答案

蚂蚁庄园是一款爱心公益游戏&#xff0c;用户可以通过喂养小鸡&#xff0c;产生鸡蛋&#xff0c;并通过捐赠鸡蛋参与公益项目。用户每日完成答题就可以领取鸡饲料&#xff0c;使用鸡饲料喂鸡之后&#xff0c;会可以获得鸡蛋&#xff0c;可以通过鸡蛋来进行爱心捐赠。其中&#…