CS231n作业笔记1.4:随机梯度下降(SGD)

26 篇文章 2 订阅
4 篇文章 0 订阅

CS231n简介

详见 CS231n课程笔记1:Introduction
本文都是作者自己的思考,正确性未经过验证,欢迎指教。

作业笔记

1. 随机梯度下降

这部分是对SVM模型进行随机梯度下降,求取近似最优解。关于随机梯度下降的知识请参考CS231n课程笔记3.2:梯度下降,关于SVM的误差以及梯度计算请参考 CS231n作业笔记1.3:SVM的误差函数以及反向传播(非向量及向量算法)
实践部分中,作者得到的assignment的linear_classifier.py的部分注释对于X的shape的描述与svm.ipynb中对于其的调用有出路,作者按照svm.ipynb的shape对其进行了更改。
同时实现mini-batch的时候,作者每次随机从训练集中抽取数据,并未保证不同batch之间是否会有覆盖。
随机梯度下降的操作很简单,只需要每次减去gradient*step_size即可。
实现结束后,通过画出Loss-iteration曲线,判断是否收敛。

bindex = np.random.choice(num_train,batch_size)
X_batch = X[bindex]
y_batch = y[bindex]
loss, grad = self.loss(X_batch, y_batch, reg)
loss_history.append(loss)

self.W += -learning_rate * grad

2. 验证集选取超参数

这里采用了固定验证集的做法,而不是常见的交叉验证。
根据Lecture的说法,注意对于多个超参数的组合,不要grid search,而是random search。这样更容易看出趋势,而且不易错过极值点。
首先小iteration、大范围搜索,最后在大iteration、小范围搜索,减少搜索时间。
作图更容易得到趋势,判断下一步搜索方向。

rand_turple = np.random.rand(50,2)
rand_turple[:,0] = rand_turple[:,0]*(learning_rates[1]-learning_rates[0]) + learning_rates[0]
rand_turple[:,1] = rand_turple[:,1]*(regularization_strengths[1]-regularization_strengths[0])+regularization_strengths[0]
for lr,rs in rand_turple:
        svm = LinearSVM()
        svm.train(X_train, y_train, learning_rate=lr, reg=rs,num_iters=2000, verbose=False)
        y_train_pred = svm.predict(X_train)
        train_acc = np.mean(y_train == y_train_pred)
        y_val_pred = svm.predict(X_train)
        val_acc = np.mean(y_train == y_val_pred)
        results[(lr,rs)] = (train_acc,val_acc)
        if (val_acc > best_val):
            best_val = val_acc
            best_svm = svm
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值