cs231n assignment1 two-layer-net

two-layer-net

首先完成神经网络对scores和损失函数的计算,其中激活函数使用RELU函数,即max(0,x)函数。
neural_net.py的loss()函数

# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****
h1 = np.maximum(0,X.dot(W1) + b1)
scores = h1.dot(W2) + b2
pass
# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****
# *****START OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****
# 求指数 (N,C)
exp_scores = np.exp(scores)
# 求和,变为 (N,1)
row_sum = np.sum(exp_scores, axis=1).reshape(N, 1)
norm_scores = exp_scores / row_sum
data_loss = - 1 / N * np.sum(np.log(norm_scores[np.arange(N),y]))
reg_loss = 0.5 * reg * (np.sum(W1 * W1) + np.sum(W2 * W2))
loss = data_loss + reg_loss
pass
# *****END OF YOUR CODE (DO NOT DELETE/MODIFY THIS LINE)*****

接下来是反向传播计算梯度,这部分有一定的难度,下面我将我自己的理解记录下来。
整体算法步骤,使用链式求导法则。每一个变量的梯度与该变量的原始大小保持一致。
下面是计算图,从左到右为神经网络正向传递,横线上方为计算得到的值;从右到左为反向传播,横线下方为梯度。

在这里插入图片描述
约定,所有的导数均为Loss对该变量的导数,即 d L o s s d 变 量 \frac{d_{Loss}}{d_{变量}} ddLoss,因此在程序中 d L o s s d_{Loss} dLoss省略不写,只写出分母。

  • 计算 d s c o r e s d_{scores} dscores,即数学表达为 d L o s s d s c o r e s \frac{d_{Loss}}{d_{scores}} dscoresdLoss,因为在data_loss计算过程中将正确分类的得分减去了,故在计算导数过程中需要对正确分类的导数值减一。
  • d b 2 d_{b2} db2= d s c o r e s d_{scores} d
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值