TrustGeo代码理解(六)utils.py

代码链接:https://github.com/ICDM-UESTC/TrustGeo

一、导入常用库和模块

from __future__ import print_function
from distutils.version import LooseVersion
from matplotlib.scale import LogisticTransform
import numpy as np
import torch
import warnings
import torch.nn as nn
import random
import matplotlib.pyplot as plt
import copy

这段代码首先包含一些导入语句,接着进行一些版本和警告的处理,最后导入了一些常用的库(numpytorchmatplotlib),并定义了一些常用的模块(nnplt)。

1、from __future__ import print_function这是为了确保代码同时在Python 2和Python 3中都能正常运行。在Python 2中,print是一个语句,而在Python 3中,print()是一个函数。通过这个导入语句,可以在Python 2中使用Python 3风格的print函数。

2、from distutils.version import LooseVersion导入LooseVersion类,用于比较版本号。

3、from matplotlib.scale import LogisticTransform导入了matplotlib库中的LogisticTransform类。LogisticTransformmatplotlib中用于对坐标轴进行变换的一个类。

4、import numpy as np导入NumPy库,并用np作为别名。NumPy是一个用于科学计算的库,提供了数组等高性能数学运算工具。

5、import torch:导入PyTorch库。PyTorch是一个深度学习框架,提供了张量计算和神经网络搭建等功能。

6、import warnings导入warnings模块,用于处理警告。

7、import torch.nn as nn导入PyTorch中的神经网络模块。

8、import random导入Python的random模块,用于生成伪随机数。

9、import matplotlib.pyplot as plt导入matplotlib库的pyplot模块,用于绘制图表。

10、import copy导入Python的copy模块,用于复制对象。

二、warnings.filterwarnings(action='once')

设置了在使用warnings.filterwarnings时的参数。filterwarnings函数用于配置警告过滤器,以控制哪些警告会被触发,以及如何处理这些警告。

具体来说,action='once'表示警告信息只会被显示一次。这对于一些可能会频繁触发的警告而言是一种控制方式,以避免在控制台或日志中大量重复的警告信息。在第一次触发警告时,它会被显示,但在后续的同类警告中,将不再显示。

请注意,这个配置仅适用于在warnings模块中配置的警告,它并不会影响其他类型的警告或错误。

三、MaxMinLogRTTScaler类定义(NN模型)

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)

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

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类定义(NN模型)

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]。

分为几个部分展开描述:

(一)__init__()

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

类的初始化方法,初始化了最大值和最小值,这里默认将数据缩放到[0, 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)

这是一个简单的数据转换函数,用于对输入数据进行归一化操作。整体功能是将输入数据进行归一化处理,确保数据在训练模型时具有统一的尺度。

1、data_o = np.array(data):将输入的数据 data 转换为NumPy数组,确保数据是数组形式。

2、# data_o = np.log(data_o + 1):这一行是被注释掉的代码。通常,对数据进行对数变换是为了减小数据的尺度差异,使其更符合某些模型的假设。但在这里被注释掉了,没有被使用。

3、return (data_o - self.min) / (self.max - self.min):对数据进行归一化操作。首先,从数据中减去最小值 self.min,然后除以数据范围(最大值 self.max 减去最小值 self.min)。这样可以将数据缩放到0到1的范围内。最终,函数返回归一化后的数据。

五、MaxMinLogScaler类定义(NN模型)

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

测序名词解释

测序深度(Sequencing Depth)是指:测序得到的碱基总量(bp)与基因组(转录组或测序目标区域大小)的比值,是评价测序量的指标之一。 测序深度的计算公式为: 测序深度 &…

Java数据结构-通过数组封装-结构分析

1、默认arrayList的数组未初始化&#xff0c;长度为0&#xff0c;容量默认是10 ArrayList<Integer> arrayList new ArrayList<>();System.out.println(ClassLayout.parseInstance(arrayList).toPrintable()); java.util.ArrayList object internals: OFF SZ …

【论文极速读】LVM,视觉大模型的GPT时刻?

【论文极速读】LVM&#xff0c;视觉大模型的GPT时刻&#xff1f; FesianXu 20231210 at Baidu Search Team 前言 这一周&#xff0c;LVM在arxiv上刚挂出不久&#xff0c;就被众多自媒体宣传为『视觉大模型的GPT时刻』&#xff0c;笔者抱着强烈的好奇心&#xff0c;在繁忙工作之…

威联通硬盘休眠后修改系统定时任务

按照网上一些教程&#xff0c;成功将威联通的机械硬盘设置了自动休眠。但是发现每天有多个整点硬盘会自动唤醒&#xff0c;怀疑是系统内置的定时任务触发了硬盘唤醒。 通过查看系统日志中事件和访问记录&#xff0c;判断出一些引发硬盘唤醒的自动任务&#xff0c;将这些定时任…

学习使用echarts漏斗图的参数配置和应用场景

学习使用echarts漏斗图的参数配置和应用场景 前言什么是漏斗图漏斗图的特点及应用场景漏斗图的特点漏斗图常见的的应用场景&#xff1a; echarts中漏斗的常用属性echart漏斗代码美化漏斗图样式1、设置标题字体大小2、设置标签样式3、设置漏斗图为渐变颜色4、设置高亮效果5、设置…

自动化测试(终章)webdriver的常用api(2)以及新的开始

目录 多层框架/窗口定位 多层框架的定位 frame是什么&#xff1f; 多层窗口定位 层级定位 使用 XPath 进行层级定位&#xff1a; 使用 CSS 选择器进行层级定位&#xff1a; 下拉框处理 alert、confirm、prompt 的处理 Alert 弹窗&#xff1a; Confirm 弹窗&#xff…

vue3 elementplus左侧无限级菜单

使用的组件是 element Plus Menu 菜单 注意&#xff1a;Menu 菜单属性参数可以自己配置 链接: Menu 菜单 //父级页面 <el-container><el-aside width"320px"><el-menuopen"handleOpen"close"handleClose":default-active"…

openmediavault debian linux安装配置企业私有网盘(三 )——raid5与btrfs文件系统无损原数据扩容

一、适用环境 1、企业自有物理专业服务器&#xff0c;一些敏感数据不外流时&#xff0c;使用openmediavault自建NAS系统&#xff1b; 2、在虚拟化环境中自建NAS系统&#xff0c;用于内网办公&#xff0c;或出差外网办公时&#xff0c;企业内的文件共享&#xff1b; 3、虚拟化环…

jmeter,http cookie管理器

Http Cookie管理器自动实现Cookie关联的原理&#xff1a; (默认:作用域在同级别的组件) 一:当Jmeter第1次请求服务器的时候,如果说服务器有通过响应头的Set-Cookie有返回Cookie,那么Http Cookie管理器就会自动的保存这些Cookie的值。 二&#xff1a;当Jmeter第2-N次请求服务器的…

PyQt6 QSpacerItem弹簧控件

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计46条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

【报错栏】(vue)Module not found: Error: Can‘t resolve ‘element-ui‘ in xxx

Module not found: Error: Cant resolve element-ui in xxx 报错原因是&#xff1a; 未安装 element-ui 依赖 解决&#xff1a; npm install element-ui 运行

生物信息学分析领域领先的特制语言环境NGLess(Next Generation Less)介绍、安装配置和详细使用方法

介绍 NGLess&#xff08;Next Generation Less&#xff09;是一种用于生物信息学分析的领先的领域特定语言&#xff08;DSL&#xff09;。它旨在简化和加速NGS&#xff08;Next Generation Sequencing&#xff09;数据的分析过程。NGLess具有清晰的语法和功能&#xff0c;使用户…

带你学C语言~指针(1)

Hello,CSDN的各位家人们&#xff0c;你们好啊&#xff01;今天&#xff0c;小赵要给大家分享的C语言知识是指针&#xff0c;相信不少家人们都或多或少被指针搞得晕头转向&#xff0c;小赵一开始也是&#xff0c;但后来小赵经过不断地努力学习&#xff0c;终于将这里面的知识弄懂…

线程的介绍

首先我们来了解一下线程是什么&#xff1a; 首先我们介绍一下程序是什么&#xff1f;程序就是我们编写的代码就叫程序&#xff0c;当我们程序运行的时候则称为进程&#xff0c;在我们现实生活中哪些用到了进程&#xff0c;就比如说我们qq&#xff0c;微信&#xff0c;百度网盘…

Spring容器中scope为prototype类型Bean的回收机制

文章目录 一、背景二、AutowireCapableBeanFactory 方法 autowireBean 分析三、Spring 容器中 scope 为 prototype 类型 Bean 的回收机制四、总结 一、背景 最近做 DDD 实践时&#xff0c;遇到业务对象需要交给 Spring 管理才能做一些职责内事情。假设账号注册邮箱应用层代码流…

【注解和反射】-- 04 类加载器、运行时类的对象

反射 03 类的加载与ClassLoader 3.4 类加载器 类加载器的作用&#xff1a;将class文件字节码内容加载到内存中&#xff0c;并将这些静态数据转换成方法区的运行时数据结构&#xff0c;然后在堆中生成一个代表这个类的java.lang.Class对象&#xff0c;作为方法中类数据的访问…

Amortized Bootstrapping of LWE:使用 BFV 打包处理

参考文献&#xff1a; [AP13] Alperin-Sheriff J, Peikert C. Practical bootstrapping in quasilinear time[C]//Annual Cryptology Conference. Berlin, Heidelberg: Springer Berlin Heidelberg, 2013: 1-20.[MS18] Micciancio D, Sorrell J. Ring packing and amortized F…

Flask维护者:李辉

Flask维护者&#xff1a;李辉&#xff0c; 最近看b站的flask相关&#xff0c;发现了这个视频&#xff1a;[PyCon China 2023] 濒危 Flask 扩展拯救计划 - 李辉_哔哩哔哩_bilibili 李辉讲他在维护flask之余&#xff0c;开发了apiflask这个依托flask的框架。GitHub - apiflask/a…

02markdown-学习笔记

一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 换行符<br>标签 写入一段测试用的正文第二段测试文本,如果要对文本进行换行可以使用<br>标签 文本修饰符 字体为斜体的修饰&#xff0c;一对星号包含 字符为粗体&#xff0c;两对星号包含 字体为…

ISP-EE(Edge Enhance)

ISP-EE(Edge Enhance) EE模块在某些ISP主控中叫做sharpness或者sharpen&#xff0c;这些名称指代的模块是同一个&#xff0c;不用再纠结。主要就是在YUV域内弥补成像过程中图像的锐度损失&#xff0c;对边缘和细节进行加强&#xff0c;从而恢复场景本应具有的自然锐度。 锐度…