【问题标题】:python deeplearning softmax with numpypython深度学习softmax与numpy
【发布时间】:2021-04-03 23:05:15
【问题描述】:

我用 numpy 实现了 softmax。 正如您在代码中看到的,我们有一个矩阵,我们想要获得该行的 softmax。 例如,第 1 行的软最大值是通过将 np.sum(np.exp([1,3,6,-3,1]) 除以 1,3,5,-3,1 来计算的 第 2 行的软最大值是找到 np.sum(np.exp([5,2,1,4,3]) 的软最大值。我该怎么做?

def softmax(x):
    return np.exp(x)/np.sum(np.exp(x),axis=1)
x = np.array([[1,3,6,-3,1],
              [5,2,1,4,3]])


print(softmax(x))
print(f"1:{softmax(x)[0]} sum : {np.sum(softmax(x)[0])}")
print(f"2:{softmax(x)[1]} sum : {np.sum(softmax(x)[1])}")

ValueError                                Traceback (most recent call last)
<ipython-input-261-eb8c9feae03f> in <module>
      5 
      6 
----> 7 print(softmax(x))
      8 print(f"1:{softmax(x)[0]} sum : {np.sum(softmax(x)[0])}")
      9 print(f"2:{softmax(x)[1]} sum : {np.sum(softmax(x)[1])}")

<ipython-input-261-eb8c9feae03f> in softmax(x)
      1 def softmax(x):
----> 2     return np.exp(x)/np.sum(np.exp(x),axis=1)
      3 x = np.array([[1,3,6,-3,1],
      4               [5,2,1,4,3]])
      5 

ValueError: operands could not be broadcast together with shapes (2,5) (2,) 
>

【问题讨论】:

标签: python-3.x numpy machine-learning deep-learning


【解决方案1】:

你应该reshapenp.sum结果。

np.exp(x) / np.sum(np.exp(x), axis=1).reshape(2,1)

而不是

np.exp(x) / np.sum(np.exp(x), axis=1)

更通用的方式,你可以使用下面的语句。

return np.exp(x) / np.sum(np.exp(x),axis=1).reshape(x.shape[0], -1)

【讨论】:

    【解决方案2】:

    这里的问题是sum(exp(x), axis=1) 返回一个一维 numpy 数组。改成sum(esp(x), axis=1, keepdims=True),避免numpy自动掉一维。

    def softmax(x):
        return np.exp(x)/np.sum(np.exp(x),axis=1, keepdims=True)
    
    x = np.array([[1,3,6,-3,1],
                  [5,2,1,4,3]])
    
    
    print(softmax(x))
    print(f"1:{softmax(x)[0]} sum : {np.sum(softmax(x)[0])}")
    print(f"2:{softmax(x)[1]} sum : {np.sum(softmax(x)[1])}")
    

    【讨论】:

      猜你喜欢
      • 2017-12-25
      • 2017-12-09
      • 2019-01-17
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      • 2018-08-31
      • 1970-01-01
      相关资源
      最近更新 更多