现象: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,以消除此影响。