Python实现softmax函数「建议收藏」

Python实现softmax函数:PS:为了避免求exp(x)出现溢出的情况,一般需要减去最大值。#-*-coding:utf-8-*-importtensorflowastfimportnumpyasnpdefsoftmax(x,axis=1):#计算每行的最大值row_max=x.max(axis=axis)…

大家好,又见面了,我是你们的朋友全栈君。

 Python实现softmax函数 :

Python实现softmax函数「建议收藏」

PS:为了避免求exp(x)出现溢出的情况,一般需要减去最大值。

# -*-coding: utf-8 -*-

import tensorflow as tf
import numpy as np

def softmax(x, axis=1):
    # 计算每行的最大值
    row_max = x.max(axis=axis)

    # 每行元素都需要减去对应的最大值,否则求exp(x)会溢出,导致inf情况
    row_max=row_max.reshape(-1, 1)
    x = x - row_max

    # 计算e的指数次幂
    x_exp = np.exp(x)
    x_sum = np.sum(x_exp, axis=axis, keepdims=True)
    s = x_exp / x_sum
    return s


A = [[1, 1, 5, 3],
     [0.2, 0.2, 0.5, 0.1]]
A= np.array(A)
axis = 1  # 默认计算最后一维

# [1]使用自定义softmax
s1 = softmax(A, axis=axis)
print("s1:{}".format(s1))


#[2]使用TF的softmax
with tf.Session() as sess:
    tf_s2=tf.nn.softmax(A, axis=axis)
    s2=sess.run(tf_s2)
    print("s2:{}".format(s2))

C++实现Softmax函数

template<typename _Tp>
int softmax(const _Tp* src, _Tp* dst, int length)
{
//    double max = 0.0;
//    double sum = 0.0;
//
//    for (int i = 0; i<k; i++) if (max < x[i]) max = x[i];
//    for (int i = 0; i<k; i++) {
//        x[i] = exp(x[i] - max);
//        sum += x[i];
//    }
//    for (int i = 0; i<k; i++) x[i] /= sum;
    //为了避免溢出,需要减去最大值
    const _Tp max_value = *std::max_element(src, src + length);
    _Tp denominator{ 0 };

    for (int i = 0; i < length; ++i) {
        dst[i] = std::exp(src[i] - max_value);
        denominator += dst[i];
    }

    for (int i = 0; i < length; ++i) {
        dst[i] /= denominator;
    }
    return 0;
}
std::vector<float> output_vector;
std::vector<float> preds;
softmax(output_vector.data(), preds.data(),output_vector.size());

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129556.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据库中间件简介_数据库中间件还用吗

    数据库中间件简介_数据库中间件还用吗数据库中间件可以简化对读写分离以及分库分表的操作,并隐藏底层实现细节,可以像操作单库单表那样操作多库多表,主流的设计方案主要有两种:1、服务端代理:需要独立部署一个代理服务,该代理服务后面管理多个数据库实例,在应用中通过一个数据源与该代理服务器建立连接,由该代理去操作底层数据库,并返回相应结果。优点是支持多语言,对业务透明,缺点是实现复杂,实现难度大,同时代理需要确保自身高可用2、客户端代理:在连接池或数据库驱动上进行一层封装,内部与不同的数据库建立连接,并对SQL…

    2025年8月5日
    8
  • 【机器学习】支持向量机原理及例题详解

    【机器学习】支持向量机原理及例题详解支持向量机(SVM)详解

    2022年10月8日
    5
  • 了解automake和autoconf(autoreconf)[通俗易懂]

    了解automake和autoconf(autoreconf)[通俗易懂]本文转载自《例解autoconf和automake生成Makefile文件》 通过这篇文章可以了解auotmake和autoconf的基本工作流程,文章讲的通俗易懂,但是版本较老。了解新版本的automake可以参考automake的WiKi主页Automake,通过下图可以很清晰的了解auomake和autoconf是如何生成configure脚本文件和最终的makefile文件…

    2025年6月18日
    5
  • 2019工程伦理慕课答案(2019秋)习题及期末答案

    2019工程伦理慕课答案(2019秋)习题及期末答案第一章习题(下)单选题(1/1point)下列哪一项不是工程与技术的区别内容和性质目的活动主体任务、对象和思维方式单选题(1/1point)下列哪一项不是工程活动的特征自主性创造性社会性确定性多选题(1points)下列哪项是工程的完整生命周期中的环节计划设计评估完成判断题(1/1point)计划、设计、建造…

    2022年5月30日
    39
  • request.setAttribute和session.setAttribute的区别「建议收藏」

    request.setAttribute和session.setAttribute的区别「建议收藏」1.request.setAttributerequest.setAttribute作用域是请求和被请求页面之间,只在此action的下一个forward需要使用时候调用;request.setAttribute()可存放的参数是String和Object。req.setAttribute(“maps”,maps);//请求转发,携带数据,req存储数据req.getRequestDispatcher(“/user.jsp”).forward(req,resp);2、session.setA

    2022年10月17日
    4
  • SQL server 查询语句「建议收藏」

    SQL server 查询语句「建议收藏」select*fromtest.dbo.users–普通条件查询whereid=1;模糊查询 select*fromtest.dbo.users whereusernamelike’%li%’;范围查询 select*fromtest.dbo.users –id在1~3之间的数据 whereidbetween1and3; select*fromtest.dbo.users –id在1~3以外的数据 where.

    2022年6月4日
    20

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号