【问题标题】:Python command np.sum(x, axis=0) and softmax functionPython 命令 np.sum(x, axis=0) 和 softmax 函数
【发布时间】:2017-08-22 10:12:24
【问题描述】:

我有以下问题:我想在 Python 中计算 softmax 函数并得到一个意想不到的结果。代码如下:

import numpy as np

def softmax(x):
    """Compute softmax values for each sets of scores in x."""
    return np.exp(x) / np.sum(np.exp(x), axis=0)

它工作得很好,但我不知道为什么:它在矩阵上工作如下:如果我插入一个 2x2 矩阵 A,输出是另一个 2x2 矩阵。这是为什么?它不应该返回一个不同大小的数组,因为矩阵的每个元素,即 $x=A[0,0]$,都会产生 2 个输出值(即 $exp(x)/(exp(A[0,0]) +exp(A[1,0]))$ 和 $exp(x)/(exp(A[0,1])+exp(A[1,1]))$,因为还是 axis=0 命令?这将导致一个 8 元素的输出数组,但实际结果只有 4 个元素。另外,axis=0 命令究竟是如何工作的?如果我输入 A=np.array([2, 4]),那么np.sum(A, axis=0) 的逻辑结果应该是 array([2, 4]),因为列是求和的。但结果是 array([6])。命令 np.sum(A , axis=1) 奇怪地产生“'axis' entry is out of bounds”,尽管结果应该是数组([6]),因为行被总结了。也许我的两个问题是相关的。 任何帮助将不胜感激! 谢谢, 里昂

【问题讨论】:

  • 寻求调试帮助的问题应包括minimal reproducible example。请包括输入 + 预期输出与实际输出。
  • 如果您考虑np.array([[2], [4]]) 并使用axis=1,您对np.sum 的直觉会起作用。

标签: python numpy


【解决方案1】:

我将跳入“最终”问题:

matrix_22 / vector_2

因为这在数学上没有意义,numpy 使用了某种假设。就像:

matrix_22 * 5

所做的是将矩阵的每个元素乘以 5。然后,如果我们将 matrix_22 视为向量的向量,那么 matrix_22 / vector_2 的结果将导致对矩阵上的每个向量应用除法运算.

您可以轻松检查执行以下操作的行为:

np.array([[14, 28], [70, 56]]) / np.array([2, 7])

符号:matrix_22 是“一些变量,其中包含一个 2x2 形状的 numpy 数组,因此它是一个 2x2 矩阵”。而vector_2 是一个包含两个元素的 numpy 数组。

【讨论】:

    猜你喜欢
    • 2018-04-20
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 2020-11-04
    • 2018-10-15
    • 1970-01-01
    相关资源
    最近更新 更多