Я пытаюсь создать свою первую нейронную сеть, которая принимает данные 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))
Если она подходит, то у меня ошибка где-то еще.
Это моя ошибка:
Код: Выделить всё
--------------------------------------------------------------------------- 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