首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反向传播算法的实现

反向传播算法的实现
EN

Stack Overflow用户
提问于 2016-12-28 01:53:38
回答 0查看 117关注 0票数 0

我正在构建一个具有以下架构的神经网络:

input layer --> fully connected layer --> ReLU --> fully connected layer --> softmax

我正在使用这里概述的方程式DeepLearningBook来实现backprop。我想我的错误在eq上。1.在微分时,我是否认为每个示例都独立地产生N x C(否示例x编号。类)矩阵或一起产生N x 1矩阵?

代码语言:javascript
复制
# 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

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41349856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档