import torch import torch.nn.functional as F import numpy as np # 定义输入向量 input_tensor = torch.tensor([1.12, 2.32, 3.43, 4.76, 4.543, 5.43, 6.75, 7.24]) # 标准 Softmax 计算 standard_softmax = F.softmax(input_tensor, dim=0) print("标准 Softmax 结果:\n", standard_softmax.numpy()) # 将输入向量拆分为两部分 part1 = input_tensor[:4] # 前4个元素 part2 = input_tensor[4:] # 后4个元素 part1_max = part1.max() part1_exp = torch.exp(part1 - part1_max) part1_exp_sum = part1_exp.sum() softmax_part1 = part1_exp part2_max = part2.max() part2_exp = torch.exp(part2 - part2_max) part2_exp_sum = part2_exp.sum() softmax_part2 = part2_exp print("softmax_part1 结果:\n", softmax_part1.numpy()) print("softmax_part2 结果:\n", softmax_part2.numpy()) # 计算全局最大值 max_global = torch.max(part1_max, part2_max) exp_sum_global = part1_exp_sum * torch.exp(part1_max - max_global) + part2_exp_sum * torch.exp(part2_max - max_global) global_coeff_part1 = softmax_part1 * torch.exp(part1_max - max_global) / exp_sum_global global_coeff_part2 = softmax_part2 * torch.exp(part2_max - max_global) / exp_sum_global merged_softmax = torch.cat([global_coeff_part1, global_coeff_part2], dim=-1) # 输出结果 print("标准 Softmax 结果:\n", standard_softmax.numpy()) print("合并后的 Softmax 结果:\n", merged_softmax.numpy()) # 验证结果是否一致 print("结果是否一致:", torch.allclose(standard_softmax, merged_softmax, atol=1e-6))