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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PHP如何解决网站大流量与高并发的问题(二)「建议收藏」

    PHP如何解决网站大流量与高并发的问题(二)

    2022年2月9日
    158
  • idea2021.8激活码[免费获取]

    (idea2021.8激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~BI…

    2022年3月22日
    70
  • navicat11.0.18激活码【2021免费激活】

    (navicat11.0.18激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1STL5S9V8F-eyJsaWNlbnNlSW…

    2022年3月27日
    386
  • web后端语言_C/C++作为web后端语言的缺点

    web后端语言_C/C++作为web后端语言的缺点C/C++C语言虽然是非常贴近操作系统的语言,能和操作系统API很好的交互,但是C语言并没有现代化工程开发所需要的面向对象功能,当然也缺乏泛型之类的功能,如果以CGI的形式开发,那么缺点非常明显,这也是第二代后端平台兴起的原因。C++具有现代化工程开发所需要的各种功能,但是它同样有缺点:缺乏字符串处理,Web开发最主要的就是字符串的处理,所有的一切几乎都要和字符串打交道,但是C…

    2022年6月25日
    43
  • 电视液晶屏好坏测试工具(分辨率4k测试工具)

    原标题:如何检测电视屏幕真伪4K、坏点漏光?两款工具一键辨别!现在的智能电视屏幕越大越薄,且许多品牌的电视都打着4K屏幕的旗号,但你真的买对电视了吗?对于大屏智能电视来说,屏幕真的很重要,在选购需要必须确定电视屏幕无坏点漏光现象,非伪4K电视屏。今天当贝市场小编分享的这两款工具,能一键辨别电视屏幕真伪4K,是否有坏点漏光等现象。1、屏幕大师屏幕大师专为智能电视及网络机顶盒设备打造,提供了包括色…

    2022年4月16日
    299
  • JVM学习1

    JVM学习1

    2021年11月12日
    39

发表回复

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

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