argmax()函数

argmax() 解释:

argmax() 是一个在数据分析和深度学习中常用的操作,它的作用是返回张量中 最大值的索引。在不同的上下文中,argmax() 可以根据指定的维度(dim)返回不同的索引位置。如果没有指定维度,它会返回整个张量中最大值的索引。

1. argmax() 不指定维度(dim)时

当你不指定 dim 参数时,argmax() 会展平整个张量,并返回 最大值的索引位置,这个位置是基于展平后的一维数组的索引。

例子:

import torch # 创建一个 2D 张量 tensor = torch.tensor([[0.1, 0.5, 0.3], [0.4, 0.2, 0.7]]) # 不指定 dim,返回整个张量中最大值的索引 max_index = torch.argmax(tensor) print(max_index) # 输出: 5

解释:
  • tensor 的形状是 (2, 3),表示有 2 行和 3 列。
  • 当没有指定 dim 时,argmax() 会将张量展平,变成一维数组 [0.1, 0.5, 0.3, 0.4, 0.2, 0.7]
  • 最大值 0.7 在展平后的数组中的索引是 5
对于 3D 张量:

tensor_3d = torch.tensor([[[0.1, 0.5], [0.3, 0.2]], [[0.7, 0.4], [0.6, 0.8]]]) # 不指定 dim,返回整个张量中最大值的索引 max_index_3d = torch.argmax(tensor_3d) print(max_index_3d) # 输出: 7

解释:
  • tensor_3d 的形状是 (2, 2, 2),表示 2 个 2x2 的矩阵。
  • 展平后,张量变成一维数组 [0.1, 0.5, 0.3, 0.2, 0.7, 0.4, 0.6, 0.8]
  • 最大值 0.8 的索引位置是 7,所以 argmax() 返回 7

2. argmax() 指定维度(dim)时

当你指定 dim 参数时,argmax() 会沿着指定的维度计算,并返回该维度上最大值的索引。

对于 2D 张量:

tensor = torch.tensor([[0.1, 0.5, 0.3], [0.4, 0.2, 0.7]]) # 沿着最后一个维度(列)计算,找到每行的最大值索引 max_indices = torch.argmax(tensor, dim=-1) print(max_indices) # 输出: tensor([1, 2])

解释:
  • tensor 的形状是 (2, 3),表示 2 行 3 列。
  • dim=-1 表示沿着 最后一个维度(即每一行的列)寻找最大值的索引。
    • 第一行 [0.1, 0.5, 0.3] 中,最大值 0.5 的索引是 1
    • 第二行 [0.4, 0.2, 0.7] 中,最大值 0.7 的索引是 2

对于 3D 张量:

tensor_3d = torch.tensor([[[0.1, 0.5], [0.3, 0.2]], [[0.7, 0.4], [0.6, 0.8]]]) # 沿着最后一个维度(列)计算,找到每个 2x2 矩阵每行的最大值索引 max_indices_3d = torch.argmax(tensor_3d, dim=-1) print(max_indices_3d)

输出

tensor([[1, 0], [0, 1]])

解释:
  • tensor_3d 的形状是 (2, 2, 2),代表 2 个 2x2 的矩阵。
  • dim=-1 表示我们沿着每个矩阵的最后一个维度(即每行的两个值)找到最大值的索引。
    • 第一个矩阵 [[0.1, 0.5], [0.3, 0.2]] 中,最大值 0.5 的索引是 1,最大值 0.3 的索引是 0
    • 第二个矩阵 [[0.7, 0.4], [0.6, 0.8]] 中,最大值 0.7 的索引是 0,最大值 0.8 的索引是 1

返回结果:

[[1, 0], [0, 1]]

表示每个 2x2 矩阵每一行最大值的索引。


3. torch.max()argmax() 的比较

  • torch.max():不仅返回最大值的索引,还会返回最大值本身。

  • argmax():只返回最大值的索引位置。

示例:

tensor = torch.tensor([[0.1, 0.5, 0.3], [0.4, 0.2, 0.7]]) # 使用 torch.max() 获取最大值和索引 max_value, max_index = torch.max(tensor.flatten(), 0) print(max_value) # 输出: 0.7 print(max_index) # 输出: 5

解释:
  • torch.max() 需要两个参数:第一个是张量,第二个是 dim 参数,表示沿哪个维度进行最大值操作。
  • flatten() 会将张量展平为一维,并返回最大值 0.7 和其索引 5

总结:

  1. argmax() 不指定 dim:会展平整个张量,返回最大值的 位置(索引)
  2. argmax() 指定 dim:会沿着指定的维度计算,并返回该维度上最大值的 索引
  3. torch.max():可以返回最大值和最大值的索引。

在深度学习中,argmax() 常用于找出预测结果中最大概率对应的类别索引,尤其在分类任务中。

### Flink 大数据处理优化技巧与最佳实践 #### 调优原则与方法概述 对于Flink SQL作业中的大状态导致的反压问题,调优的核心在于减少状态大小以及提高状态访问效率。通过合理配置参数和调整逻辑设计可以有效缓解此类瓶颈[^1]。 #### 参数设置建议 针对不同版本下的具体特性差异,在实施任何性能改进措施前应当充分理解当前使用的Flink版本特点及其局限性;同时也要考虑特定应用场景的需求特征来定制化解决方案。这包括但不限于并行度设定、内存分配策略等方面的选择[^2]。 #### 数据流模式优化 采用广播变量机制可作为一种有效的手段用于降低主数据流转过程中所需维护的状态量级。当存在一对多关系的数据集间需频繁交互时,将较小规模的一方作为广播状态保存下来供另一方查询匹配使用不失为明智之举。此方式特别适用于维表Join操作中,其中一方变动相对较少但又必须保持最新记录的情况[^3]。 ```sql -- 创建临时视图以支持后续JOIN操作 CREATE TEMPORARY VIEW dim_table AS SELECT * FROM kafka_source; -- 定义Temporal Table Function以便获取指定时间点上的历史快照 CREATE FUNCTION hist_dim_table AS 'com.example.HistoricalDimTableFunction'; -- 执行带有时态条件约束的JOIN语句 SELECT o.order_id, d.product_name FROM orders o LEFT JOIN LATERAL TABLE(hist_dim_table(o.event_time)) AS d ON o.product_id = d.id; ``` 上述代码片段展示了如何利用Flink SQL实现基于时间戳的历史维度表连接功能,从而确保每次都能准确捕捉到事件发生瞬间对应的最恰当的产品名称信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值