算法面试准备 - 手撕系列第一期 - Softmax

算法面试准备 - 手撕系列第一期 - Softmax

目录

  • [算法面试准备 - 手撕系列第一期 - Softmax](#算法面试准备 - 手撕系列第一期 - Softmax)
    • Softmax原理图
    • [Softmax实现代码 - 复杂版和简单版本(推荐简单版本)](#Softmax实现代码 - 复杂版和简单版本(推荐简单版本))
    • 参考

Softmax原理图


Softmax原理图

Softmax实现代码 - 复杂版和简单版本(推荐简单版本)

  • 方法一:循环计算
python 复制代码
import torch


def softmax(X): # X为Tensor向量,大小为(batch_size,len)
    # 方法一,复杂版本
    for i in range(X.size()[0]):
        # 取出某行的Tensor
        # 为了防止数据的上下,先把数据减去最大值
        X[i]-=max(X[i].clone())
        X[i]=torch.exp(X[i])
        X[i]/=X[i].sum()
    return X

   

if __name__=='__main__':
    X=[[i for i in range(4)] ,[j for j in range(1,5) ],[5,4,3,2]]

    X=torch.tensor(X,dtype=torch.float)
    print(softmax(X))
  • 方法二:广播利用torch函数
python 复制代码
import torch


def softmax(X): # X为Tensor向量,大小为(batch_size,len)
    # 方法二:简单版本

    # 增加一步,防止数据上下溢出
    # (batch_size, 1)
    X_max,X_index=torch.max(X,dim=1,keepdim=True) # 让其保持二维
    X -= X_max
    # 取exp
    X_exp = torch.exp(X)
    # 求和从1维求和得到的是(batch_size,1)
    X_sum=X_exp.sum(dim=1,keepdim=True)
    return X_exp/X_sum

if __name__=='__main__':
    X=[[i for i in range(4)] ,[j for j in range(1,5) ],[5,4,3,2]]

    X=torch.tensor(X,dtype=torch.float)
    print(softmax(X))

参考

小红书资料:哲学专业转算法岗|手撕softmax - 小红书

相关推荐
小仙女的小稀罕11 小时前
适合销售从业者会议整理使用的销售录音转任务工具
大数据·人工智能·学习·自然语言处理·语音识别
GitCode官方11 小时前
头号 Builder 集结|出海 Agent 开造!大疆 Pocket4 等你赢!
人工智能·agent·atomgit
CIO_Alliance11 小时前
2026年生成式引擎优化(GEO)解决方案选型指南|幂链科技的实战可验证与全链路合规
人工智能·geo·deepseek·ai搜索优化·幂链geo·豆包ai
纪伊路上盛名在11 小时前
聊一聊关于gene的富集分析
算法·数据分析·统计分析·计算生物·gene
DreamWear11 小时前
Claude Context:让 AI 编程助手真正"看见"整个代码库
人工智能·agent
leory11 小时前
请详细描述JVM的垃圾回收机制?
android·面试
leory11 小时前
volatile关键字的作用是什么?它能保证原子性吗?
android·面试
HalukiSan11 小时前
VLLM部署Qwen3-30B-A3B-Instruct-2507-FP8
人工智能
DreamWear11 小时前
Agent Skills:给 AI 编码代理装上高级工程师的工作纪律
人工智能·agent
水月天涯11 小时前
ClaudeCode入门00-初识神器(小白入门-到底什么是ClaudeCode,为什么大家都说好用?)
人工智能·ai编程