【问题标题】:Compute softmax activation function using python使用python计算softmax激活函数
【发布时间】:2019-11-17 18:46:41
【问题描述】:

我试图编写一种方法来计算 SoftMax 激活函数,该函数将矩阵或数组作为输入并将 softmax 函数应用于每一行。

这是我尝试过的:

import numpy as np
def softmaxSingle(x):
    e_x = np.exp(x - np.max(x))
    return e_x / e_x.sum()    

def softmax( x):
    if np.shape(x)[0]>1:
        result=[[]]*np.shape(x)[0]
        for i in range(len(result)):
            result[i]=list(softmaxSingle(x[i]))
        return list(result)
    e_x = np.exp(x - np.max(x))
    return e_x / e_x.sum()

当我尝试SoftMax(x) 其中x 是一个矩阵时,它会运行(尽管我不知道它是否会产生正确的答案)。当x 只是一个列表时,它不起作用

【问题讨论】:

    标签: python numpy softmax


    【解决方案1】:

    您可以简单地将list 转换为np.array

    import numpy as np
    
    def softmax(x):
        """Compute softmax values for each sets of scores in x."""
        if isinstance(x, list):
            x = np.array(x)
        e_x = np.exp(x - np.max(x))
        return e_x / e_x.sum()
    

    【讨论】:

    • 但是 'x-np.max(x)' 方法不会用每行的最大值减去每行,而是用所有条目的最大值减去每一行,可以吗?试试这个例如: a=[[1,2,3],[4,5,6]] print(a-np.max(a)) 并且它的输出是: [[-5 -4 -3 ] [-2 -1 0]]
    • @user42493 你能给我输入示例吗?是的,它需要用该矩阵的最大值减去每个元素,你不觉得吗?如果逐行是一个要求,那么你仍然可以这样工作
    • 好的,那么 e_x.sum() 呢?这给出了矩阵中所有条目的总和,但我们需要将 e_x 的每一行除以每一行 e_x 的总和?
    • 来自文档:执行求和的一个或多个轴。默认值,axis=None,将对输入数组的所有元素求和。如果轴为负数,则从最后一个轴计数到第一个轴。
    猜你喜欢
    • 2020-09-14
    • 2021-03-23
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 2021-03-06
    • 2018-03-24
    • 2023-04-03
    相关资源
    最近更新 更多