#python #numpy #backpropagation
Вопрос:
Предположим, у меня есть матрица 2 на 2 w = np.array([[1, 2], [3, 4]])
и массив x = np.array([5, 6])
. Если я запущу y = np.dot(w, x)
, то y-это другой массив np.array([17, 39])
. Здесь все хорошо, хотя на самом деле мы знаем x
, что при расчете используется вектор столбцов, и вывод y
также должен быть вектором столбцов.
Во время обратного распространения градиент w
is grad @ x.T
, где @
является умножением матрицы , x.T
транспонируется x
и grad
представляет собой массив, который имеет ту же форму , что и y, но заполнен 1: grad = np.ones_like(y)
.
В идеале, grad
должен быть вектор 2 на 1 и вектор x.T
строк 1 на 2, поэтому результатом является матрица 2 на 2, того же размера, что и w. Однако оба grad
и x
являются 1-D массивами, поэтому результатом становится одно число.
Есть ли какие-то решения? Спасибо за любую помощь!
Комментарии:
1. В
numpy
терминахx
это 1d массив. Это не «вектор столбцов».np.dot
четко определяет, что он делает, когда аргумент равен 1d.x.T
изменяет (одно) измерение(измерения)x
; он не добавляет измерение. Любопытно, почему вы используетеnp.dot
и в одном, и@
в другом?2. Мои ошибки. Но в данном случае все они приводят к одному и тому же результату. независимо от того, использую ли я@, точку или matmul
3. Любыми способами, если
x
действительно (2,1), тоx.T
будет (1,2), и последнее вычисление даст (2,2). A (2,1)@ с a (1,2) также является «внешним» продуктом или транслируется по элементам, поскольку добавляется только измерение размера 1.4. Обычно массивы данных ML-вопросов представляют собой 2d (n-образцы, n-объекты). Таким образом,даже если есть только одна функция, массив будет (n, 1). Форма (n,) распространена в numpy и для трансляции действует как (1, n), но изменение формы на (n, 1) также легко и используется по мере необходимости.