softmax函数python实现

import numpy as np

def softmax(x):
    """
    对输入x的每一行计算softmax。

    该函数对于输入是向量(将向量视为单独的行)或者矩阵(M x N)均适用。

    代码利用softmax函数的性质: softmax(x) = softmax(x + c)

    参数:
    x -- 一个N维向量,或者M x N维numpy矩阵.

    返回值:
    x -- 在函数内部处理后的x
    """
    orig_shape = x.shape

    # 根据输入类型是矩阵还是向量分别计算softmax
    if len(x.shape) > 1:
        # 矩阵
        tmp = np.max(x,axis=1) # 得到每行的最大值,用于缩放每行的元素,避免溢出。 shape为(x.shape[0],)
        x -= tmp.reshape((x.shape[0],1)) # 利用性质缩放元素
        x = np.exp(x) # 计算所有值的指数
        tmp = np.sum(x, axis = 1) # 每行求和
        x /= tmp.reshape((x.shape[0], 1)) # 求softmax
    else:
        # 向量
        tmp = np.max(x) # 得到最大值
        x -= tmp # 利用最大值缩放数据
        x = np.exp(x) # 对所有元素求指数
        tmp = np.sum(x) # 求元素和
        x /= tmp # 求somftmax
    return x

x = np.array([[1,2,3],[4,7,6]])
print(softmax(x))

原文地址:https://www.cnblogs.com/ljygoodgoodstudydaydayup/p/10944431.html

时间: 2024-10-10 23:57:32

softmax函数python实现的相关文章

Softmax函数与交叉熵

在Logistic regression二分类问题中,我们可以使用sigmoid函数将输入Wx+b映射到(0,1)区间中,从而得到属于某个类别的概率.将这个问题进行泛化,推广到多分类问题中,我们可以使用softmax函数,对输出的值归一化为概率值 这里假设在进入softmax函数之前,已经有模型输出C值,其中C是要预测的类别数,模型可以是全连接网络的输出aa,其输出个数为C,即输出为: 所以对每个样本,它属于类别i的概率为: 通过上式可以保证 ,即属于各个类别的概率和为1 对softmax函数进

Sigmoid函数与Softmax函数的理解

1. Sigmod 函数 1.1 函数性质以及优点 其实logistic函数也就是经常说的sigmoid函数,它的几何形状也就是一条sigmoid曲线(S型曲线). 其中z是一个线性组合,比如z可以等于:b + w1*x1 + w2*x2.通过代入很大的正数或很小的负数到g(z)函数中可知,其结果趋近于0或1 A logistic function or logistic curve is a common “S” shape (sigmoid curve). 也就是说,sigmoid函数的功能

logistic函数和softmax函数

  简单总结一下机器学习最常见的两个函数,一个是logistic函数,另一个是softmax函数,若有不足之处,希望大家可以帮忙指正.本文首先分别介绍logistic函数和softmax函数的定义和应用,然后针对两者的联系和区别进行了总结. 1. logistic函数 1.1 logistic函数定义 引用wiki百科的定义: A logistic function or logistic curve is a common "S" shape (sigmoid curve). 其实逻

zip函数-Python 3

zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表. zip函数在获取数据后,生成字典(dict)时比较好用. for examples: 1 # Code based on Python 3.x 2 # _*_ coding: utf-8 _*_ 3 # __Author: "LEMON" 4 5 pList = [('li', 'LY', 80), ('zeng', 'ZW', 90), ('dudu', 'LR', 98)] 6 names = [] 7

partial函数-python学习

一个函数可以有多个参数,而在有的情况下有的参数先得到,有的参数需要在后面的情景中才能知道,python 给我们提供了partial函数用于携带部分参数生成一个新函数. def add(a,b,c=2): print("a is:%s b is %s c is %s"%(a,b,c)) return a+b+c add_with_a_b=partial(add,2,3) print(add_with_a_b())# it's 7 add_with_a=partial(add,9) pri

深入理解softmax函数

Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签  可以取两个以上的值.Softmax模型可以用来给不同的对象分配概率.即使在之后,我们训练更加精细的模型时,最后一步也需要用softmax来分配概率.本质上其实是一种多种类型的线性分割,当类标签  取 2 时,就相当于是logistic回归模型. 在 softmax回归中,我们解决的是多分类问题(相对于 logistic 回归解决的二分类问题),类标  可以取  个不同的值(而不是 2 个).因

迭代器与函数Python学习(四)

1.1 迭代器: 迭代的工具 1.1.1 什么是迭代: 指的是一个重复的过程,每一次重复称为一次迭代,并且每一次重复的结果是下一次重复的初始值 while True: print('=====>') l=['a','b','c'] count=0 while count < len(l): print(l[count]) count+=1   1.1.2 为什么要有迭代器? 对于序列类型:str,list,tuple,可以依赖索引来迭代取值, 但是对于dict,set,文件,python必须为

操作redis的函数python

redis是一个key-value结构的数据库,value的格式可以是string,set(),list,map集合(即python里面的dict),sorted set(有序集合) 1.连接redis数据库 说明小插曲:Redis和strictRedis,后者是官方推荐使用的 import redis r=redis.Redis(host='id地址',port=6379,password='',db=12)#指定连接redis的端口,端口号,以及哪个数据库#连接redis#增删改查 set函

callback回调函数--python

编程分为两类:系统编程(system programming)和应用编程(application programming).所谓系统编程,简单来说,就是编写库:而应用编程就是利用写好的各种库来编写具某种功用的程序,也就是应用.系统程序员会给自己写的库留下一些接口,即API(application programming interface,应用编程接口),以供应用程序员使用.所以在抽象层的图示里,库位于应用的底下. 当程序跑起来时,一般情况下,应用程序(application program)会