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

相关推荐
ofoxcoding2 分钟前
GPT Image 2.5 API 实战:Python 调用实现图片生成与编辑
人工智能·python·gpt·ai
lvwangshu14 分钟前
图论:LCA、树的直径、树的重心、二分图与 Tarjan 缩点
算法·图论
后台模板学习18 分钟前
2026最新面试真题:到达用英语怎么说背后的逻辑与源码剖析
面试·职场和发展·php
来让爷抱一个19 分钟前
2026 语义缓存实战:把命中契约写进SPEC,MonkeyCode 云端跑通
人工智能·机器学习·缓存
俊哥V29 分钟前
AI 今日研究简报 · 2026-09-09
人工智能·ai
张小姐的猫35 分钟前
【AI大模型接入SDK】 —— Gemini接入封装
android·数据结构·数据库·c++·人工智能·python
时空节拍AI数字人40 分钟前
AI 数字人为什么需要“3D”?2D 不够用吗
人工智能·网络协议·tcp/ip·3d·信息可视化
米小虾44 分钟前
4-bit 量化"几乎无损"?把它放进 Agent 循环里再试一次
人工智能·agent
陈皮糖..1 小时前
从零搭建一个简易 AI 运维问答机器人(RAG + LangChain + Streamlit)
运维·人工智能·ai·langchain·机器人