cs231n学习心得

来源:互联网 发布:淘宝代刷自动返款系统 编辑:程序博客网 时间:2024/06/03 12:49

现象:SVM分类中我写的代码loss持续下下降;但在test上accuracy只有10%左右(10类随机猜测为10%),而该方法应当能达到>30%的Accuracy

原因1:在SVM分类章节中,我将生成随机batch写成如下形式,导致生成的batch中data和标签不匹配

#错误写法

X_batch = X[np.random.choice(num_train,batch_size),:]
y_batch = y[np.random.choice(num_train,batch_size)]w


#正确写法

batch_inx = np.random.choice(num_train, batch_size)
X_batch = X[batch_inx, :]
y_batch = y[batch_inx]


原因2:

但是这个错误困扰了我很久很久,一直没有排查出来,原因如下:

1.上述两种写法在train时,loss都会呈类似曲线的下降,这迷惑了我。


一种解释:

我推测这是因为在SVM train中,正则化项导致W持续减小,使得Scores=X×W也持续减小导致。


结论:

在使用了Regularization时,W即使没有得到正确的训练,它的值也会持续下降,若W的下降会导致loss的下降,则loss会下降并达到一个稳定值,则此时会导致训练正确的假象;


解决方案:

在初次测试时,可以Regularization的参数Reg设定为0,以消除此影响。

0 0
原创粉丝点击