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

相关推荐
智慧化智能化数字化方案18 小时前
财务数字化——解读IBM-财经数字化转型规划【附全文阅读】
大数据·人工智能
数据猿视觉18 小时前
2026 智能手表怎么选?这款 AI 旗舰闭眼冲
人工智能·智能手表
小辉同志18 小时前
739. 每日温度
c++·算法·leetcode
Flutter笔记18 小时前
如何在本地跑 Core ML 模型识别呼噜声,并用 iCloud 优雅同步?
前端·人工智能·程序员
彩虹编程18 小时前
逻辑张量网络 LTN 入门:从一阶逻辑到实值语义
人工智能·神经符号·新一代人工智能·可解释性ai
程序员泠零澪回家种桔子18 小时前
AI安全-提示词攻防解析
人工智能·安全
诗词在线18 小时前
诗词在线古诗词传播
人工智能·word·php
DeepModel18 小时前
机器学习非线性降维:Isomap 等距映射
人工智能·机器学习
Via_Neo19 小时前
二进制枚举
数据结构·算法·leetcode
荣光属于凯撒19 小时前
P3040 [USACO12JAN] Bale Share S
算法·深度优先