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

相关推荐
DashVector6 分钟前
通义深度搜索-上传文件
人工智能·深度学习·阿里云·ai·深度优先
龙山云仓6 分钟前
No131:AI中国故事-对话荀子——性恶论与AI约束:礼法并用、化性起伪与算法治理
大数据·人工智能·深度学习·算法·机器学习
柠萌f9 分钟前
從靈感到跑量一站完成?
人工智能
夏鹏今天学习了吗14 分钟前
【LeetCode热题100(90/100)】编辑距离
算法·leetcode·职场和发展
CJenny35 分钟前
Claude Code常用操作和使用方法
人工智能·python
2501_9413331038 分钟前
铁路轨道部件识别与分类_YOLO13与BAMConv改进模型实现_1
人工智能·分类·数据挖掘
九河云39 分钟前
纺织印染“数字色差仪”:光谱+AI模型一次调色成功省染料12%
大数据·人工智能·安全·机器学习·数字化转型
芒克芒克41 分钟前
数组去重进阶:一次遍历实现最多保留指定个数重复元素(O(n)时间+O(1)空间)
数据结构·算法
星火开发设计1 小时前
二维数组:矩阵存储与多维数组的内存布局
开发语言·c++·人工智能·算法·矩阵·函数·知识
2501_911067661 小时前
光能赋能,步步生 “电”!叁仟智慧路灯杆 + 太阳能地砖,解锁智慧城市新范式
人工智能·智慧城市