Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用softmax理解反向传播_Python_Neural Network_Softmax - Fatal编程技术网

Python 用softmax理解反向传播

Python 用softmax理解反向传播,python,neural-network,softmax,Python,Neural Network,Softmax,如果这是一个愚蠢的问题,我很抱歉,但我就是不明白这一点。 我正在尝试创建我的第一个神经网络,它采用MNIST数据(28x28),上面是手绘的数字0-9,并输出数字神经网络认为是的数据。在最后一层,我需要做一个softmax函数,它可以输出这些数字的所有概率,然后加起来等于1 def softmax(z): exps = np.exp(z - z.max()) return exps/np.sum(exps), z 在这一点上,一切都应该是好的。 但是现在我们进入反向传播部分=

如果这是一个愚蠢的问题,我很抱歉,但我就是不明白这一点。 我正在尝试创建我的第一个神经网络,它采用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回溯(最近的调用)
最后)在
--->26个参数=模型(x_测试一、y_测试一、图层尺寸)
在模型中(X,y,图层尺寸,
学习率、时代、打印、激活)
10 zCache=zCaches[l+1]
11
--->12个梯度=L_模型_向后(Al、y、linCaches、zCaches、激活)
13
14个参数=更新参数(参数、年级、学习率)
在L_model_backward(Al,y,linCaches,
zCaches,激活)
--->11个梯度[“dA”+str(L-1)],梯度[“dW”+str(L)],梯度[“db”+str(L)]=线性反向活动(dAl,zCaches[L-1],linCaches[L-1],
“softmax”)
12
在衬板上向后活动(dA、zCache、,
linCache,激活)
20 dZ=后向软最大值(dA,Z)
--->21 dau_prev,dW,db=线性_backward(dZ,linCache)
22返回上一个数据仓库,数据仓库,数据库
23
以线性形式向后(dZ、linCache)
---->7 dW=(1/m)*np.dot(dZ,A_-prev.T)
8分贝=(1/m)*np.和(dZ,轴=1,keepdims=True)
9 dA_prev=np.dot(宽、宽)
值错误:形状(1000010000)和(201000)未对齐:10000(尺寸
1) != 20(尺寸0)```
现在我认为我的错误在
liner\u backward
方法中,因为它与softmax不兼容。我是对的,还是完全错了

问题2:我应该使用什么方法来代替
线性_向后
方法?


非常感谢您的帮助

很抱歉,这只是一个评论而不是回答,但我不完全理解你的问题。backprop导数实际上是目标函数的微积分导数。在确定backprop导数之前,必须选择目标函数。你选了一个吗?我是应该道歉的人。显然,我对神经网络基础知识的理解还不完整。另外,我上高中,还不懂微积分,这让我很难理解任何东西。你说的目标函数是指成本函数,对吗?如果是,那么我想使用交叉熵function@Lukas第一步:回去学微积分,你需要它。第二步:熟悉导数,熟悉向量和矩阵(不要担心张量)。第三步:学习反向传播并理解它,尝试自己推导它以确保你理解它。第四步:写代码对不起,我只是评论,不是回答,但我不完全理解你的问题。backprop导数实际上是目标函数的微积分导数。在确定backprop导数之前,必须选择目标函数。你选了一个吗?我是应该道歉的人。显然,我对神经网络基础知识的理解还不完整。另外,我上高中,还不懂微积分,这让我很难理解任何东西。你说的目标函数是指成本函数,对吗?如果是,那么我想使用交叉熵function@Lukas第一步:回去学微积分,你需要它。第二步:熟悉导数,熟悉向量和矩阵(不要担心张量)。第三步:学习反向传播并理解它,尝试自己推导它以确保你理解它。步骤4:编写代码
--------------------------------------------------------------------------- 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) ```