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.maxmin = torch.from_numpy(self.min).type_as(data).to(data.device) if torch.is_tensor(data) else self.mindata[data != 0] = (data[data != 0] - min) / (max - min)return datadef inverse_transform(self, data):max = torch.from_numpy(self.max).type_as(data).to(data.device) if torch.is_tensor(data) else self.maxmin = torch.from_numpy(self.min).type_as(data).to(data.device) if torch.is_tensor(data) else self.mindata = data * (max - min) + minreturn 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.maxmin = torch.from_numpy(self.min).type_as(data).to(data.device) if torch.is_tensor(data) else self.mindata[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.maxmin = torch.from_numpy(self.min).type_as(data).to(data.device) if torch.is_tensor(data) else self.mindata = data * (max - min) + minreturn 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

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

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

相关文章

《Linux C编程实战》笔记:文件读写

Linux c下文件读写可用creat&#xff0c;open&#xff0c;close&#xff0c;read&#xff0c;write&#xff0c;lseek等函数。对于跨平台的程序还是用C标准库的fopen等。 open #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open …

Linux——进程创建与进程终止

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、进程创建1、fork函数初识2、fork函数返回值3、写时拷贝4、fork常规用法5、fork调用失败的…

【产品经理】产品增效项目落地,项目反哺产品成长

产品和项目是相辅相成的关系&#xff0c;产品的规范、成熟&#xff0c;为项目的快速落地提供支撑&#xff0c;项目的落地反哺产品&#xff0c;促进产品的成长成熟。 软件工程的初期是&#xff0c;我们需要什么&#xff0c;就立项项目&#xff0c;通过项目实现需要。 随着项目的…

什么是前端国际化(internationalization)和本地化(localization)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Python+Yolov8+onnx-deepsort方法物体人流量识别统计

程序示例精选 PythonYolov8onnx-deepsort方法物体人流量识别统计 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonYolov8onnx-deepsort方法物体人流量识别统计》编写代码&#xff0c;…

Oracle(2-15)RMAN Incomplete Recovery

文章目录 一、基础知识1、The Procedure 不完全恢复步骤2、UNTIL TIME Example 基于时间的恢复3、UNTIL SEOUENCE Example 基于序列的恢复4、什么是RMAN的不完全恢复 二、基础操作1、不完全恢复准备工作2、不完全恢复开始恢复 RMAN Incomplete Recovery RMAN的不完全恢复 目标&…

翻译: 工作使用ChatGPT的例子 Day-to-day usage of web UI LLMs

本周&#xff0c;我们将首先探讨生成型AI在商业中的作用&#xff0c;然后是其对社会的影响&#xff0c;例如对就业的影响。我们将从探讨如何在日常工作中使用网络用户界面访问生成型AI开始&#xff0c;然后再看看如何系统地分析一个企业&#xff0c;以识别使用生成型AI增强或自…

二叉搜索树的实现

本文旨在讲解如何编写一颗二叉搜索树&#xff0c;包括基本的增删查改的操作。 目录 一、二叉搜索树的概念 ​编辑二、二叉搜索树的编写 2.1节点的编写 2.2节点的插入 2.3节点的查找 2.4节点的删除 三、二叉搜索树的应用 四、 二叉搜索树的性能分析 五、完整代码 一、…

labelme标注json文件检查标注标签(修改imageWidth,imagePath,imageHeight)

# !/usr/bin/env python # -*- encoding: utf-8 -*- #---wzhimport os import json# 这里写你自己的存放照片和json文件的路径 json_dir =rC:\Users\Lenovo\Desktop\json3 json_files = os.listdir(json_dir

Java解决最小路径和

Java解决最小路径和 01 题目 给定一个包含非负整数的 *m* x *n* 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 **说明&#xff1a;**每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#xff1a;grid [[1,3…

Vue3报错: ‘defineProps‘ is not defined,解决方法

问题出现: 今天在使用 <script setup>组合式 API 的语法糖的时候&#xff0c;定义defineProps时候报错&#xff1a; ‘defineProps’ is not defined 查了一下资料&#xff0c;这是因为eslint的语法校验导致的问题。 解决方法1&#xff1a; 在项目根目录的文件.eslin…

大模型词向量:解析语义,助你成为沟通达人

文章目录 一、向量二、如何把词转换为向量三、如何把词转换为向量进阶 三、如何让向量具有语义信息 大家好&#xff0c;我是脚丫先生 (o^^o) 在研究大模型的时候&#xff0c;有一篇文章写得非常通俗易懂。 之前在其他地方不是怎么看懂&#xff0c;但是在这里懂了&#x1f604;…

flowable工作流看这一篇就够了(高级篇 下)

目录 三、候选人和候选人组 3.1、候选人 3.1.1、定义流程图 3.1.2、部署和启动流程实例 3.1.3、任务的查询 3.1.4、任务的拾取 3.1.5、任务的归还 3.1.6、任务的交接 3.1.7、任务的完成 3.2、候选人组 3.2.1、管理用户和组 用户管理 Group管理 为用户分配组 3.2…

深入理解网络 I/O:单 Group 混杂模式|多 Group 主从模式

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

Linux 常用的操作命令

我们习惯的使用Windows,安装软件进行使用&#xff0c;比如 WPS&#xff0c;浏览器&#xff0c;一些工具&#xff0c;但是在Linux上就需要用命令去操作&#xff0c;也可以使用像Ubuntu 和 CentOS这类的可视化面板 Linux系统是开源的&#xff0c;所以开发人员可以反复的发现Bug以…

1231. 航班时间(整行字符串输入:getline(cin,line))

题目&#xff1a; 1231. 航班时间 - AcWing题库 输入样例&#xff1a; 3 17:48:19 21:57:24 11:05:18 15:14:23 17:21:07 00:31:46 (1) 23:02:41 16:13:20 (1) 10:19:19 20:41:24 22:19:04 16:41:09 (1)输出样例&#xff1a; 04:09:05 12:10:39 14:22:05 思路&#xff1a; …

selenium 做 Web 自动化,鼠标当然也要自动化!

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

docker安装Prometheus

docker安装Prometheus Docker搭建Prometheus监控系统 环境准备(这里的环境和版本是经过测试没有问题,并不是必须这个版本) 主机名IP配置系统说明localhost随意2核4gCentOS7或者Ubuntu20.0.4docker版本23.0.1或者24.0.5,docker-compose版本1.29 安装Docker Ubuntu20.0.4版本…

STM32——串口

串口发送/接收函数&#xff1a; HAL_UART_Transmit(); 串口发送数据&#xff0c;使用超时管理机制 HAL_UART_Receive(); 串口接收数据&#xff0c;使用超时管理机制 HAL_UART_Transmit_IT(); 串口中断模式发送 HAL_UART_Receive_IT(); 串口中断模式接收 HAL_UART_Tran…

Netty常见的设计模式

简介 设计模式在软件开发中起着至关重要的作用&#xff0c;它们是解决常见问题的经过验证的解决方案。而Netty作为一个优秀的网络应用程序框架&#xff0c;同样也采用了许多设计模式来提供高性能和可扩展性。在本文中&#xff0c;我们将探讨Netty中使用的一些关键设计模式&…