2.環境搭建:
3.在pycharm中使用anaconda
6.執行資料集中的.s**件使得資料集可用
3.前置知識:numpy、python、scipy基礎學習,教程
假設我們有乙個訓練集10000*3072,也就是10000張畫素為3072的,有乙個測試集的100*3072,測試和訓練集總共的型別有10種(這裡型別指的是內容的型別,如:內容為貓、狗等)。我們將某一張訓練命名為tn,將一張測試命名為cm,將乙個的型別命名為la。
我們在1中說了svm演算法的基本思想,但是我們也可以從中發現一些問題。1.每次要通過計算最終的準確率才能知道當前的w是否變好了,這樣效率太低了。2.修改w的時候我們只是在嘗試,如果能知道當前具體的下降趨勢是不是速度就更快了呢?接下來的一節我們就會解決上面的問題。
2.優化函式:為了解決上面提出的第二個問題,我們可以定義乙個優化函式,來不斷的根據趨勢優化我們的w
3.隨機梯度下降法:我們現在已經有了優化函式和損失函式,但是我們會發現每一次進行w優化的時候,都要遍歷一整個訓練集,這樣效率就會很低,所以我們可以每次訓練取一小部分,訓練集,然後進行訓練,這樣的話效率就會比較高。一般來說,取的數字都是2的冪
2.定義了:全域性**1
全域性**2
3.接下來三行是從訓練資料x_train和y_train中獲取驗證集資料4.接下來三行是從訓練資料x_train和y_train中獲取全體訓練集資料5.接下來三行是從num_training中隨機選取隨機訓練集資料6.接下來四行表示:將x_train,x_val,x_test,x_dev這些n*32*32*3的集,轉化成n*3072的矩陣。簡單來說就是將每張拉伸成一維的矩陣,方便後面進行資料處理。
7.接下來五行表示:將x_train,x_val,x_test,x_dev這些集進行去均值處理,簡單來說就是計算出x_train全體的均值,然後讓其他集的每張邱減去這個均值。這樣的好處是統一量綱,和歸一化操作類似,只是沒有再除以方差而已8.接下來兩行定義了一系列學習率和正則引數,在後面會使用兩層迴圈找到最高正確率下的學習率和正則引數。
9.接下來三行定義了:每個學習率和正則引數下的正確率鍵值對results,最高的正確率best_val,最高正確率下的svm物件後面可以之間對測試集進行**。
10.進入了兩層迴圈,被迴圈測引數分別是學習率和正則引數
5.退出兩層迴圈,此時計算出了全部訓練的dw和loss之和,所以dw和loss需要除以num_train,再為loss和dw加上正則項。
6.返回dw和loss
4.w的迴圈迭代結束之後,返回上一層
2.在當前學習率和正則引數下,將w訓練完畢之後,分別使用x_train和x_val來進行**並算出準確率train_accuracy和val_accuracy。
3.一直迴圈上面的操作,直至找到最大的正確率下的best_svm和best_val,並將歷次的train_accuracy,val_accuracy儲存在results中。
4.結束兩層迴圈
11.輸出10中歷次迴圈的train_accuracy,val_accuracy與學習率和正則引數12.使用上面找到的最佳的best_svm來**測試集x_test得到了測試集的準確率test_accuracy並輸出
13.獲取最佳的best_svm中的w,將其重新轉化為n*32*32*3,然後以形式輸出。
我們前面做的了svm演算法就是不斷根據損失函式對於wi和wj這兩個分量的偏導數來優化w的演算法。這裡的損失函式定義了w的好壞,如果我們換乙個損失函式的定義方式,會不會有不一樣的結果呢?我們接下來要講的就是另一種損失函式的演算法softmax
2.損失函式的梯度,這裡就是對wj和wyi算偏導:
softmax偏導
3.以上就是softmax和svm的全部不同,所以只需要更換一下公式的**就可以了。
cs231n筆記總結
cs231n的課程以及作業都完成的差不多了,後續的課程更多的涉及到卷積神經網路的各個子方向了,比如語義分割 目標檢測 定位 視覺化 遷移學習 模型壓縮等等。assignment3有涉及到這些中的一部分,但需要深入了解的話還是得看 了。所以在看 前把之前已學的知識,筆記和作業 一起做個整理。部落格裡主...
CS231n理解筆記
linear classification notes 該方法的組成 乙個是評分函式 原始影象資料到類別分值的對映 乙個是損失函式 用來量化 分類標籤的得分和真實標籤之間的一致性。影象分類的任務是從已有的固定分類標籤中選擇乙個並分配一張影象,我們介紹了knn分類器,該分類器的基本思想是通過將測試影象...
cs231n 學習 前言
吐槽 我為啥學這個 學這門課之前,到官網 要科學上網哦 查了下相關資訊,有部分需求 要求1,得會 python 且熟悉 c c 其實我是不會 python 的,但語言只是一種工具,不該成為鴻溝,且這麼流行的語言上手也不應該難吧 盲目自信一把 要求2,微積分和線性代數,嗯,這個不是問題。要求3,概率統...