github地址:https://github.com/ZJUFangzh/cs231n
搭建一个两层的神经网络。
Forward pass
先计算前向传播过程,编辑cs231n/classifiers/neural_net.py
的TwoLayerNet.loss
函数
这个就和之前的svm和softmax一样了:
1 | def loss(self, X, y=None, reg=0.0): |
检验一下:
1 | loss, _ = net.loss(X, y, reg=0.05) |
1 | Difference between your loss and correct loss: |
Backword pass
依旧是这个loss函数里面,根据W1,b1,W2,b2,求出grads,求导的公式课程里没给,不过NG老师给了,shallow neural networks,但是表示的维度不太一样,需要做稍微的修改:
1 |
|
检验一下:
1 | W2 max relative error: 3.440708e-09 |
train network
补全train()
函数,其实是一样的,先创建一个minibatch,然后计算得到loss和grads,更新params:
1 | ######################################################################### |
再补全predict()
函数
1 | ########################################################################### |
然后可以计算画图了:
1 | net = init_toy_model() |
载入数据集
接下来就可以载入大的数据集,进行训练了,代码都写好了,
得到的准确度是:0.287
画个图:
调超参数
1 | best_net = None # store the best model into this |