用softmax理解反向传播

2024-04-24 13:52:31 发布

您现在位置:Python中文网/ 问答频道 /正文

如果这是一个愚蠢的问题,我很抱歉,但我就是想不通。 我正在尝试创建我的第一个神经网络,它采用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导数函数是否适合我的神经网络?

如果它是合适的,那么我有错误的地方。 这是我的错误:

--------------------------------------------------------------------------- ValueError                                Traceback (most recent call
last) <ipython-input-21-b0721d5dd18f> in <module>
---> 26 parameters = model(x_testone, y_testone, layer_dims)

<ipython-input-20-0653ba2ad7e6> 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)

<ipython-input-18-8b76528a319a> 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 

<ipython-input-17-6e9b3ba31571> 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 

<ipython-input-16-4b15b65d0522> 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方法?

非常感谢您的帮助!你知道吗


Tags: ininputdbmodelipythonnpactivationda