算法面试准备 - 手撕系列第一期 - 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 - 小红书

相关推荐
leoZ23110 小时前
本地跑大模型实战(七):llama.cpp 性能调优,让推理更快更省
java·人工智能·spring·生成对抗网络·语言模型·自然语言处理·llama
To_OC10 小时前
我把《天龙八部》塞进向量数据库后,终于搞懂了 RAG 到底是个啥
人工智能·llm·agent
阿坤带你走近大数据10 小时前
基金面试准备1
面试·职场和发展
蜡台10 小时前
AI Agent(智能体)入门基础教程
人工智能
Akir.weiwen11 小时前
Token 层差异:从颜色值到语义状态的三层跃迁
人工智能·设计规范
迷迭香yy11 小时前
集合竞价数据挖掘实战:用Python构建开盘信号识别系统
人工智能·python·数据挖掘
烬羽11 小时前
React Router 嵌套路由:一个 `Outlet` 引发的布局思考
react.js·面试·前端框架
大模型momo11 小时前
Spring AI 实战:多 Agent 协作实战 —— 分工拆解复杂旅游行程任务
人工智能·spring·ai·agent·旅游
小程故事多_8011 小时前
从A2C、TRPO、PPO到GRPO,强化学习策略梯度算法完整演进与大模型落地实战解析
人工智能·算法
冬奇Lab11 小时前
开源项目第176期:Better Harness — 不审查 diff,审查工作流本身,给 AI 编程 Agent 的五维评估框架
人工智能·开源·agent