Понимание обратного распространения ошибки с помощью softmaxPython

Программы на Python
Ответить
Anonymous
 Понимание обратного распространения ошибки с помощью softmax

Сообщение Anonymous »

Извините, если это глупый вопрос, но я просто не могу уложить это в голове.
Я пытаюсь создать свою первую нейронную сеть, которая принимает данные MNIST (28x28), на которых нарисованы от руки числа 0–9, и выводит, какие цифры считает нейронная сеть. На последнем уровне мне нужно создать функцию softmax, которая может выводить все вероятности этих чисел, которые затем суммируются до 1.

Код: Выделить всё

def softmax(z):
exps = np.exp(z - z.max())

return exps/np.sum(exps), z
На этом этапе все должно быть хорошо.
Но теперь мы переходим к обратному распространению ошибки => Я нашел в Интернете эту функцию softmax для обратного распространения ошибки.

Код: Выделить всё

def softmax_backward(dA, Z):
x, _ =softmax(dA)
s=x.reshape(-1,1)

return (np.diagflat(s) - np.dot(s, s.T))
Вопрос 1: Подходит ли эта производная функция softmax для моей NN?

Если она подходит, то у меня ошибка где-то еще.
Это моя ошибка:

Код: Выделить всё

--------------------------------------------------------------------------- ValueError                                Traceback (most recent call
last)  in 
---> 26 parameters = model(x_testone, y_testone, layer_dims)

 in model(X, y, layer_dims,
learning_rate, epochs, print_cots, activation)
10         zCache = zCaches[l+1]
11
---> 12         grads = L_model_backward(Al, y, linCaches, zCaches, activation)
13
14         parameters = update_parameters(parameters, grads, learning_rate)

 in L_model_backward(Al, y, linCaches,
zCaches, activation)
---> 11     grads["dA" + str(L-1)], grads["dW" + str(L)], grads["db" + str(L)] = liner_activ_backward(dAl, zCaches[L-1], linCaches[L-1],
"softmax")
12

 in liner_activ_backward(dA, zCache,
linCache, activation)
20         dZ = softmax_backward(dA, Z)
---> 21         dA_prev, dW, db = linear_backward(dZ, linCache)
22         return dA_prev, dW, db
23

 in linear_backward(dZ, linCache)
----> 7     dW = (1/m) * np.dot(dZ, A_prev.T)
8     db = (1/m) * np.sum(dZ, axis=1, keepdims=True)
9     dA_prev = np.dot(W.T, dZ)

ValueError: shapes (10000,10000) and (20,1000) not aligned: 10000 (dim
1) != 20 (dim 0) ```

Теперь я думаю, что моя ошибка связана с методом liner_backward, поскольку он несовместим с softmax. Прав ли я в этом или совершенно неправ?

Вопрос 2: Какой метод мне следует использовать вместо метода Linear_backward?

Большое спасибо за любую помощь!

Подробнее здесь: https://stackoverflow.com/questions/584 ... th-softmax
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»