# Double check taht the loss is reasonable: def init_two_layer_model(input_size,hidden_size,output_size): # initialize a model model={} model['W1']=0.0001*np.random.randn(input_size,hidden_size) model['b1']=np.zeros(hidden_size) model['W2']=0.0001*np.random.randn(hidden_size,output_size) model['b2']=np.zeros(output_size) return model model=init_two_layer_model(32*32*3,50,10) #input size,hidden size,number of classes loss,grad=two_layer_net(X_train,model,y_train,0.0) # 0.0 denotes disable regularization print loss """ 如果我们加上了正则项,loss会变大一点,这是完整性 """ """ 往往需要先确保可以过拟合非常小部分的训练数据""" model=init_two_layer_model(32*32*3,50,10) # trainer=ClassfierTrain() X_tiny=x_train[:20] # take examples y_tiny=y_train[:20] best_model,stats=trainer.train(X_tiny,y_tiny,X_tiny,y_tiny, model,two_layer_net, num_epochs=200,reg=0.0, updat='sgd',learning_rate_decay=1, sample_batchs=False, learning_rate=1e-3,verbose=True)
1. loss not going down:
learning rate too low
2. 即使损失没怎么变化,但正确率却很快上升到了20%,为什么?
虽然这里的分布依然很分散,因为我们的损失项很接近,但是当我们移动这些分布时,都朝着正确的方向在轻微的移动,我们的权重参数在朝着正确的方向改变,现在准确率可能发生突变,因为我们正选取最大的准确率,所以准确率会得到一个很大的提升,虽然损失还是很分散。
3.loss exploding:
learning rate too high