前言
大家好,我是Kay,小白一个。以下是我完成斯坦福 cs231n-assignment1-two_layer_net 这份作业的做题过程、思路、踩到的哪些坑、还有一些得到的启发和心得。希望下面的文字能对所有像我这样的小白有所帮助。
两层的网络处理方法与之前的SVM/Softmax 的处理方法类似,关键在于函数和梯度的计算。
TODO1:计算 scores
【思路】公式是:W2 * max(0, W1*x) 用代码实现之即可。
scores_hid = np.dot(X, W1) + b1
scores_hid = np.maximum(0, scores_hid)
scores =np.dot(scores_hid, W2) + b2
结果正确。
TODO2:计算 loss
【思路】用 softmax 的公式,不要忘记加上正则惩罚项。
scores = scores - np.max(scores, axis = 1,keepdims=True)
exp_sum = np.sum(np.exp(scores), axis = 1,keepdims=True)
loss = -np.sum(scores[range(N), y]) +np.sum(np.log(exp_sum))
loss = loss / N + 0.5 * reg * (np.sum(W1 *W1) + np.sum(W2 * W2))
【开始 Debug】
这个 bug 我是找得真是要气死自己啊!感觉公式都没记错啊!Run 了好几次 loss 还是不够小,郁闷之下跑去百度,贴了别人的代码结果 loss 也是这么多但是他们的结果很小,喵喵喵?我定眼一看,别人的 reg 都是 0.1!凭什么我给的是0.05。想哭、难受。