Как преобразовать уравнение градиентного спуска для глубокого обучения в python - axis = 0 - PullRequest
0 голосов
/ 25 апреля 2018

Я думаю, что я следую тому же онлайн-уроку, что и упомянутый в посте: Как преобразовать уравнение градиентного спуска для глубокого обучения в питон

Я понимаю, что мы должны рассчитать стоимость и дБ, но мой вопрос: почему они ставят ось = 0 в обоих уравнениях? Другими словами, я не понимаю ось = 0, для чего она используется в этом расчете. Каков будет результат, если вы сделаете расчет без оси = 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

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Просто для ясности: во многих средах глубокого обучения все параметры рассматриваются как тензоры, поэтому скаляры просто рассматриваются как тензоры 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.]))
0 голосов
/ 25 апреля 2018

Это пример типа вопроса, который вы могли бы попробовать самим переводчику, чтобы понять его за то же или меньшее количество времени, которое вы, вероятно, взяли, чтобы составить этот вопрос.

Другой способ - посмотреть документацию.Здесь всегда полезно ознакомиться с документацией.Документацию по np.sum() можно найти здесь

Некоторые выдержки из документации, если вам все еще лень:

...
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
...