Softmax 的导数输出非常大的形状
The derivative of Softmax outputs really large shapes
我正在创建一个基本的,也是我的第一个手写数字识别神经网络,没有任何框架(如 Tensorflow、PyTorch...),使用 反向传播算法。
我的神经网络有 784 个输入和 10 个输出。所以对于最后一层,我必须使用Softmax。
由于一些内存错误,我现在的图像形状为 (300, 784),标签形状为 (300, 10)
之后,我计算 分类交叉熵 的损失。
现在我们要解决我的问题了。在反向传播中,我需要手动计算激活函数的一阶导数。我是这样做的:
dAl = -(np.divide(Y, Al) - np.divide(1 - Y, 1 - Al))
#Y = test labels
#Al - Activation value from my last layer
然后我的反向传播就可以开始了,所以最后一层是softmax。
def SoftmaxDerivative(dA, Z):
#Z is an output from np.dot(A_prev, W) + b
#Where A_prev is an activation value from previous layer
#W is weight and b is bias
#dA is the derivative of an activation function value
x = activation_functions.softmax(dA)
s = x.reshape(-1,1)
dZ = np.diagflat(s) - np.dot(s, s.T)
return dZ
1.这个功能正常吗?
最后,我想计算权重和偏差的导数,所以我使用这个:
dW = (1/m)*np.dot(dZ, A_prev.T)
#m is A_prev.shape[1] -> 10
db = (1/m)*np.sum(dZ, axis = 1, keepdims = True)
但是它在 dW 上失败了,因为 dZ.shape 是 (3000, 3000)(与 A_prev.shape 相比,它是 (300,10))
因此我假设,只有 3 种可能的结果。
我的Softmax backward是错误的
dW错了
我在其他地方完全有一些其他错误
任何帮助将不胜感激!
我最近遇到了同样的问题。我不确定,但也许这个问题会对你有所帮助:Softmax derivative in NumPy approaches 0 (implementation)
我正在创建一个基本的,也是我的第一个手写数字识别神经网络,没有任何框架(如 Tensorflow、PyTorch...),使用 反向传播算法。
我的神经网络有 784 个输入和 10 个输出。所以对于最后一层,我必须使用Softmax。
由于一些内存错误,我现在的图像形状为 (300, 784),标签形状为 (300, 10) 之后,我计算 分类交叉熵 的损失。 现在我们要解决我的问题了。在反向传播中,我需要手动计算激活函数的一阶导数。我是这样做的:
dAl = -(np.divide(Y, Al) - np.divide(1 - Y, 1 - Al))
#Y = test labels
#Al - Activation value from my last layer
然后我的反向传播就可以开始了,所以最后一层是softmax。
def SoftmaxDerivative(dA, Z):
#Z is an output from np.dot(A_prev, W) + b
#Where A_prev is an activation value from previous layer
#W is weight and b is bias
#dA is the derivative of an activation function value
x = activation_functions.softmax(dA)
s = x.reshape(-1,1)
dZ = np.diagflat(s) - np.dot(s, s.T)
return dZ
1.这个功能正常吗?
最后,我想计算权重和偏差的导数,所以我使用这个:
dW = (1/m)*np.dot(dZ, A_prev.T)
#m is A_prev.shape[1] -> 10
db = (1/m)*np.sum(dZ, axis = 1, keepdims = True)
但是它在 dW 上失败了,因为 dZ.shape 是 (3000, 3000)(与 A_prev.shape 相比,它是 (300,10)) 因此我假设,只有 3 种可能的结果。
我的Softmax backward是错误的
dW错了
我在其他地方完全有一些其他错误
任何帮助将不胜感激!
我最近遇到了同样的问题。我不确定,但也许这个问题会对你有所帮助:Softmax derivative in NumPy approaches 0 (implementation)