在本作業(yè)中器联,將基于k-最近鄰(k-Nearest Neighbor)或者SVM/Softmax分類器實踐一個簡單的圖像分類流程二汛。本作業(yè)的目標如下:
- 理解基本的圖像分類流程和數(shù)據驅動方法(訓練與預測階段)。
- 理解訓練拨拓、驗證肴颊、測試分塊,學會使用驗證數(shù)據來進行超參數(shù)調優(yōu)渣磷。
- 熟悉使用numpy來編寫向量化代碼婿着。
- 實現(xiàn)并應用k-最近鄰(k-NN)分類器。
- 實現(xiàn)并應用支持向量機(SVM)分類器醋界。
- 實現(xiàn)并應用Softmax分類器竟宋。
- 實現(xiàn)并應用一個兩層神經網絡分類器。
- 理解以上分類器的差異和權衡之處形纺。
- 基本理解使用更高層次表達相較于使用原始圖像像素對算法性能的提升(例如:色彩直方圖和梯度直方圖HOG)丘侠。
注:本文采用本地操作完成作業(yè)。
0 環(huán)境搭建
- 官方教程就是在Linux上進行的逐样,但是虛擬機里的ubuntu速度太慢了蜗字,就在Windows上操作打肝。
- 下載作業(yè)zip文件:點擊這里
- 解壓zip文件,命令行進入assignment1 文件夾挪捕,使用conda命令創(chuàng)建Python3.6虛擬環(huán)境闯睹,并安裝依賴包:
conda create -n assignment1 pip python=3.6 # 創(chuàng)建python3.6虛擬環(huán)境
activate assignment1 # 激活虛擬環(huán)境
pip install -r requirements.txt # 安裝依賴包,我是一個個裝的担神,貌似不好用
# 安裝完成后退出虛擬環(huán)境即可
deactivate # 退出虛擬環(huán)境
每次打開jupyter notebook時需要先激活這個虛擬環(huán)境楼吃。
當然也可以直接用anaconda自帶的python3.7解釋器,不需要安裝任何依賴包妄讯,直接進行下一步操作孩锡。
- 下載CIFAR-10數(shù)據集。有兩種方式亥贸,一是可以去Linux系統(tǒng)躬窜,按照官方操作,進入assignment1文件夾炕置,執(zhí)行:
cd cs231n/datasets
./get_datasets.sh
將下載的數(shù)據拷貝到Windows下相同位置即可荣挨;另一種方式是直接去官網下載,解壓到cs231n/datasets朴摊,下載地址點擊這里默垄。
data_batch_1 ~ data_batch_5 是劃分好的訓練數(shù)據,每個文件里包含10000張圖片甚纲,test_batch 是測試集數(shù)據口锭,也包含10000張圖片。這幾個文件都是通過 pickle 產生的介杆,所以在讀取的時候也要用到這個包鹃操,下面是讀取代碼:
import pickle
def load_CIFAR_10_file(filename):
with open(filename, 'rb') as f:
dict = pickle.load(f, encoding='latin1') # 讀取到的是一個字典
return dict
batch1 = load_CIFAR_10_file('E:/計算機視覺/cs231n 2017 spring/作業(yè)/assignment1\cs231n\datasets\cifar-10-batches-py/data_batch_1')
print(batch1.keys())
print(batch1['batch_label'])
print(batch1['labels'][0])
print(batch1['data'][0])
print(batch1['filenames'])
輸出結果為:- batch_label
對應的值是一個字符串,用來表明當前文件的一些基本信息春哨【0
如果是 data_batch_1 這個文件,里面的值就是:training batch 1 of 5 - labels
對應的值是一個長度為10000的列表赴背,每個數(shù)字取值范圍 0~9椰拒,代表當前圖片所屬類別。 - data
10000 * 3072 的二維數(shù)組癞尚,每一行代表一張圖片的像素值耸三。(32*32*3=3072) - filenames
長度為10000的列表,里面每一項是代表圖片文件名的字符串浇揩。
作業(yè)中使用的是斯坦福自己編寫的方法,功能更強大憨颠。
- 啟用IPython notebook服務器胳徽,輸入指令:jupyter notebook积锅,自動進入瀏覽器打開Notebook,選擇打開Assignment1里的 .ipynb文件即可养盗。注意要在assignment1目錄下打開jupyter notebook缚陷。
至此,應該可以愉快的寫作業(yè)了往核!
本人答案:點擊這里
第一次作業(yè)比較簡單箫爷,就不寫攻略了。難點只有向量化操作以及反向傳播聂儒,主要還是鍛煉numpy的使用虎锚。