【问题标题】:How to convert deep learning gradient descent equation into python - axis=0如何将深度学习梯度下降方程转换为python-axis=0
【发布时间】:2018-04-25 06:33:38
【问题描述】:

我想我正在遵循与帖子中提到的相同的在线教程: How to convert deep learning gradient descent equation into python

我知道我们必须计算成本和分贝,但我的问题是他们为什么将axis=0 放在两个方程中?换句话说,我不明白axis=0,它在这个计算中是用来做什么的。如果不使用axis=0进行计算会是什么结果

import numpy as np

cost = -1*((np.sum(np.dot(Y,np.log(A))+np.dot((1-Y),(np.log(1-A))),axis=0))/m)

db = np.sum((A-Y),axis=0)/m

【问题讨论】:

  • 在链接问题的答案之一中,我看到使用了axis=1Y 的形状为 (1, N),因此应在第二个轴上进行求和。
  • 你好@MPA你是对的,它必须是axis = 1但我仍然不明白为什么添加axis = 1而不仅仅是:cost = -1 *((np。 sum(np.dot(Y,np.log(A))+np.dot((1-Y),(np.log(1-A)))))/m) 你能举个例子解释一下区别吗在计算中?

标签: python deep-learning


【解决方案1】:

这是一个问题类型的示例,您可以自己在解释器中尝试,以便在您撰写此问题所花费的相同或更少的时间内理解它。

另一种方法是查看文档。在这里查阅文档总是一个好习惯。关于np.sum() 的文档可以在here 找到

文档的一些摘录,如果你还觉得懒惰的话:

...
axis : None or int or tuple of ints, optional

Axis or axes along which a sum is performed. The default, axis=None, 
will sum all of the elements of the input array. If axis is negative it 
counts from the last to the first axis.
...

文档中的一些示例:

>>> np.sum([0.5, 1.5])
2.0
>>> np.sum([[0, 1], [0, 5]])
6
>>> np.sum([[0, 1], [0, 5]], axis=0)
array([0, 6])
>>> np.sum([[0, 1], [0, 5]], axis=1)
array([1, 5])

可视化

  -----> axis = 1
| [[0, 1
|  [0, 5]]
v
axis = 0

【讨论】:

  • 你好@Vj,我的问题更多的是为什么我们必须使用axis=1而不是只计算没有axis=1的成本
  • 对不起,我想我明白了,tnx 全部解释!
  • 啊!也许我误解了你的问题。无论如何,如果您为社区中可能有相同问题的人发布一个解释它的答案会很好!
【解决方案2】:

为了清楚起见:在许多深度学习框架中,所有参数都被视为张量,因此标量被简单地视为 0 阶张量(大小为 1x1)。如果您执行np.sum(),您将展平张量并将所有分量相加以产生标量(不是张量)。通过显式使用axis=1,您可以创建一个 0 阶张量(在您的情况下)。我不知道您在问题中链接的代码是否需要这样做,但我可以想象这在某些深度学习框架中发挥了作用。

这里有一个简单的例子来说明我的观点:

import numpy as np

x = np.ones((1, 10))
no_ax = np.sum(x)
ax0 = np.sum(x, axis=0)
ax1 = np.sum(x, axis=1)

print(no_ax, ax0, ax1)

结果:

(10.0, array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]), array([10.]))

【讨论】:

    猜你喜欢
    • 2018-01-31
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 2013-11-22
    • 2016-10-27
    • 1970-01-01
    相关资源
    最近更新 更多