我正在构建一个具有以下架构的神经网络:
input layer --> fully connected layer --> ReLU --> fully connected layer --> softmax
我正在使用这里概述的方程式DeepLearningBook来实现backprop。我想我的错误在eq上。1.在微分时,我是否认为每个示例都独立地产生N x C(否示例x编号。类)矩阵或一起产生N x 1矩阵?
# derivative of softmax
da2 = -a2 # a2 comprises activation values of output layer
da2[np.arange(N),y] += 1
da2 *= (a2[np.arange(N),y])[:,None]
# derivative of ReLU
da1 = a1 # a1 comprises activation values of hidden layer
da1[a1>0] = 1
# eq. 1
mask = np.zeros(a2.shape)
mask = [np.arange(N),y] = 1
delta_2 = ((1/a2) * mask) * da2 / N
# delta_L = - (1 / a2[np.arange(N),y])[:,None] * da2 / N
# eq.2
delta_1 = np.dot(delta_2,W2.T) * da1
# eq. 3
grad_b1 = np.sum(delta_1,axis=0)
grad_b2 = np.sum(delta_2,axis=0)
# eq. 4
grad_w1 = np.dot(X.T,delta_1)
grad_w2 = np.dot(a1.T,delta_2)奇怪的是,eq中的注释行。1返回偏置的正确值,但我似乎不能证明使用该方程是合理的,因为它返回一个N x 1矩阵,该矩阵与da2的相应行相乘。
编辑:我正在解决CS231n课程的作业问题,可以在这里找到:CS231n
https://stackoverflow.com/questions/41349856
复制相似问题