如何基于字母表字典将独热编码张量批量转换为对应字符?
实现方案
你不需要额外定义映射字典,给定的alphabet列表本身就符合「索引值对应字符位置」的映射规则,直接按索引取值后拼接即可,完整实现如下:
# 1. 拿到argmax返回的索引张量(最后一维取最大值下标) indices = a.argmax(-1) # 2. 将张量转为CPU侧的普通整数列表 # *如果你的张量本来就在CPU上,可以省略.cpu() index_list = indices.cpu().tolist() # 3. 批量映射为字符并拼接为完整字符串 result = ''.join([alphabet[i] for i in index_list]) print(result)
如果你的输入是批量的多序列(独热张量形状为[batch_size, 序列长度, 字母表大小],argmax后形状为[batch_size, 序列长度]),用以下代码批量处理整个batch:
batch_indices = a.argmax(-1) batch_result = [] for seq_idx in batch_indices.cpu().tolist(): batch_result.append(''.join([alphabet[i] for i in seq_idx])) # batch_result 中每个元素对应一条序列的字符串结果
验证
你给出的示例argmax输出前三个值为10,4,17,对应alphabet[10] = 'M'、alphabet[4] = 'F'、alphabet[17] = 'V',和你给出的预期输出序列开头MFV完全匹配,逻辑正确。
内容的提问来源于stack exchange,提问作者khashayar ehteshami
相关产品推荐
相关产品推荐

