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

相关推荐
IronMurphy1 分钟前
【算法三十七】51. N 皇后
算法·深度优先
IT 行者2 分钟前
Web逆向工程AI工具:WebScout MCP Server,给AI装上眼睛和手
人工智能·逆向·web逆向·mcp
DoUfp0bgq3 分钟前
从直觉到算法:贝叶斯思维的技术底层与工程实现
算法
管二狗赶快去工作!4 分钟前
体系结构论文(九十三):LLM-Aided Compilation for Tensor Accelerators
人工智能·语言模型·自然语言处理·bug·体系结构
Anycall.Q6 分钟前
RE-IMAGEN(ICLR 2023)
人工智能·计算机视觉·imagen
ThisIsMirror15 分钟前
leetcode 452 Arrays.sort()排序整数溢出、Integer.compare(a[1], b[1])成功的问题
算法·leetcode
王老师青少年编程15 分钟前
csp信奥赛c++之状压枚举
数据结构·c++·算法·csp·信奥赛·csp-s·状压枚举
CS创新实验室17 分钟前
AI 领域的 Harness Engineering:概念、实践与前景综述
人工智能·机器学习·aigc·harness
张元清21 分钟前
React 鼠标追踪与交互效果实战
前端·javascript·面试
橘子编程21 分钟前
操作系统原理:从入门到精通全解析
java·linux·开发语言·windows·计算机网络·面试