矩阵混乱度(熵值)代码计算

2024-04-20 07:52
文章标签 代码 计算 矩阵 混乱

本文主要是介绍矩阵混乱度(熵值)代码计算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、先回顾下熵值的数据公式:

在这里插入图片描述

2、jax.numpy代码

注意的点:熵值计算的输入的必须是归一化的正值
import jax.numpy as jnp
import jax

def _entroy(probs):log_probs = jnp.log2(jnp.maximum(1.0e-30, probs))mean_sum_plogp = jnp.mean(- jnp.sum(log_probs * probs, axis=-1))return mean_sum_plogp

随机

key = jax.random.PRNGKey(123)
inputs = jax.random.normal(key, shape=(3, 4))
print(f'inputs:\n{inputs}')
probs1 = jax.nn.softmax(inputs)
print(f'probs1:\n{probs1}')
entroy_value1 = _entroy(probs1)
print(f'entroy_value1: {entroy_value1}\n\n')输出:
inputs:
[[-0.31682462 -1.5700184   0.6431673  -0.11953171][ 0.21440512 -0.886306   -0.0515956  -0.81674606][-1.241783   -0.63905096 -0.65371424  0.88143796]]
probs1:
[[0.19548938 0.05583005 0.5105548  0.23812577][0.40722093 0.13545571 0.31210986 0.14521345][0.07700823 0.140702   0.1386539  0.64363587]]
entroy_value1: 1.6717370748519897

极端均匀

极端均匀,熵值最大。最大值为log2(dim),例子的shape为3 * 4,我们计算的为最后一维的熵值情况,因此dim为4,所以log2(4) = 2。

probs2 = jnp.array([[0.25, 0.25, 0.25, 0.25], [0.25, 0.25, 0.25, 0.25], [0.25, 0.25, 0.25, 0.25]])
print(f'probs2:\n{probs2}')
entroy_value2 = _entroy(probs2)
print(f'entroy_value2: {entroy_value2}\n\n')
输出:
probs2:
[[0.25 0.25 0.25 0.25][0.25 0.25 0.25 0.25][0.25 0.25 0.25 0.25]]
entroy_value2: 2.0

增加混乱程度

增加混乱度,熵值减小

# 修改了矩阵的概率值
probs3 = jnp.array([[0.5, 0, 0.25, 0.25], [0.25, 0.25, 0.25, 0.25], [0.25, 0.25, 0.25, 0.25]])
print(f'probs3:\n{probs3}')
entroy_value3 = _entroy(probs3)
print(f'entroy_value3: {entroy_value3}\n\n')
输出:
probs3:
[[0.5  0.   0.25 0.25][0.25 0.25 0.25 0.25][0.25 0.25 0.25 0.25]]
entroy_value3: 1.8333333730697632

极端混乱

极端混乱度,熵值最小,最小值跟矩阵的维度无关,基本都为0

probs4 = jnp.array([[0, 0, 1, 0],[0, 0, 1, 0], [0, 0, 1, 0]])
print(f'probs4:\n{probs4}')
entroy_value4 = _entroy(probs4)
print(f'entroy_value4: {entroy_value4}\n\n')
输出:
probs4:
[[0 0 1 0][0 0 1 0][0 0 1 0]]
entroy_value4: 0.0

3、numpy代码:

import numpy as np
剩下代码把随机输jnp换成np即可。然后就是生成随机输入和Softmax也有点不一样。

4、torch代码

import torchdef _entroy(probs):log_probs = torch.log2(torch.maximum(torch.tensor(1.0e-30), probs))mean_sum_plogp = torch.mean(- torch.sum(log_probs * probs, dim=-1))return mean_sum_plogptorch.manual_seed(123)

随机

inputs = torch.rand(3, 4)
print(f'inputs:\n{inputs}')
probs1 = torch.nn.functional.softmax(inputs)
print(f'probs1:\n{probs1}')
entroy_value1 = _entroy(probs1)
print(f'entroy_value1: {entroy_value1}\n\n')
输出:
inputs:
tensor([[0.2961, 0.5166, 0.2517, 0.6886],[0.0740, 0.8665, 0.1366, 0.1025],[0.1841, 0.7264, 0.3153, 0.6871]])
probs1:
tensor([[0.2135, 0.2662, 0.2042, 0.3161],[0.1886, 0.4166, 0.2008, 0.1940],[0.1814, 0.3120, 0.2068, 0.2999]])
entroy_value1: 1.947859764099121

极端均匀

probs2 = torch.tensor([[0.25, 0.25, 0.25, 0.25], [0.25, 0.25, 0.25, 0.25], [0.25, 0.25, 0.25, 0.25]])
print(f'probs2:\n{probs2}')
entroy_value2 = _entroy(probs2)
print(f'entroy_value2: {entroy_value2}\n\n')
输出:
probs2:
tensor([[0.2500, 0.2500, 0.2500, 0.2500],[0.2500, 0.2500, 0.2500, 0.2500],[0.2500, 0.2500, 0.2500, 0.2500]])
entroy_value2: 2.0

改变矩阵的混乱程度

probs3 = torch.tensor([[0.5, 0, 0.25, 0.25], [0.25, 0.25, 0.25, 0.25], [0.25, 0.25, 0.25, 0.25]])
print(f'probs3:\n{probs3}')
entroy_value3 = _entroy(probs3)
print(f'entroy_value3: {entroy_value3}\n\n')
输出:
probs3:
tensor([[0.5000, 0.0000, 0.2500, 0.2500],[0.2500, 0.2500, 0.2500, 0.2500],[0.2500, 0.2500, 0.2500, 0.2500]])
entroy_value3: 1.8333333730697632

极端混乱

probs4 = torch.tensor([[0, 0, 1, 0],[0, 0, 1, 0], [0, 0, 1, 0]])
print(f'probs4:\n{probs4}')
entroy_value4 = _entroy(probs4)
print(f'entroy_value4: {entroy_value4}\n\n')
输出:
tensor([[0, 0, 1, 0],[0, 0, 1, 0],[0, 0, 1, 0]])
entroy_value4: 0.0

这篇关于矩阵混乱度(熵值)代码计算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/919696

相关文章

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

IIS 7.0 及更高版本中的 FTP 状态代码

《IIS7.0及更高版本中的FTP状态代码》本文介绍IIS7.0中的FTP状态代码,方便大家在使用iis中发现ftp的问题... 简介尝试使用 FTP 访问运行 Internet Information Services (IIS) 7.0 或更高版本的服务器上的内容时,IIS 将返回指示响应状态的数字代