cs231n學習之路 2 線性分類器

2021-09-26 03:57:27 字數 2601 閱讀 8436

最簡單的線性分類器:

f (x

,w,b

)=wx

+bf(x, w,b)= wx + b

f(x,w,

b)=w

x+bw和b是訓練引數。x是輸入資料。在公式中,x和b是向量,x是單個樣本reshape之後的向量,b的長度和類別數目一致,w是矩陣。所以我們想將線性分類器應用到影象上,就必須先將影象reshape為乙個向量。

w的shape是[out_dims,in_dims]

對線性分類器可以是如下理解:

在深度學習尤其是識別分類任務中,常常會用到內積相似性,即兩個向量相乘的積越大,這兩個向量在特徵空間的余弦( cos )距離越小。而w和x相乘,就是計算樣本和每乙個類別的表徵向量的相似性。w如果按照行抽取出來,我們可以獲得in_dims個向量,向量的長度是輸入影象的reshape之後的長度。

當模型訓練完畢,我們得到了較好的w引數之後,就按照行抽取出來in_dims個向量,把這些向量reshape為影象大小,然後imshow出來,就是課程上的這幅圖。

每一類都有自己的乙個表徵。這個表徵可以被視作代表了這個類別的大致影象,如果輸入影象和某個類的表徵的乘積很大,則說明這個影象屬於這個類的概率很大。

這就是線性分類器的大致思想。

import numpy as np

class

linearclassifier

(object):

def__init__

(self)

: self.w =

none

deftrain

(self,x,y,learning_rate=1e-

3,reg=1e-

5,num_iters=

100,

batch_size=

200)

:# 訓練樣本數目, 乙個樣本的向量長度

num_train, dim = x.shape

num_classes = np.

max(y)+1

# 假設y在[0 - k-1]之間, 我們需要的是那個k,所以這裡加1

if self.w ==

none

: self.w =

0.001

* np.random.randn(dim, num_classes)

loss_history =

for it in

range

(num_iters)

:# 為當前迭代 隨機挑選出 訓練集

random_index = np.random.choice(

len(x)

,batch_size,replace=

true

) x_batch = x[random_index]

y_batch = y[random_index]

loss, grad = self.loss(x_batch,y_batch,reg)

# 更新引數w

self.w -= learning_rate*grad

defloss

(self,x,y,reg)

: dw = np.zeros_like(self.w)

num_classes = self.w.shaoe[1]

batch_size = x.shape[0]

scores = x.dot(self.w)

# x * w

# the shape of scores is [ batch_size. num_classes ]

exp_scores = np.exp(scores)

softmax_scores = exp_scores / np.

sum(exp_scores,axis=1)

exp_corrent_class_scores = softmax_scores[np.arange(batch_size)

, y]

loss =

- np.log(exp_corrent_class_scores)

.mean(

) loss +=

0.5*reg*np.dot(self.w,self.w)

# 正則化

# 求導

# softmax的求導是經過softmax得到的矩陣,在每個正例位置減一

# z = x*w +b

# a = softmax(z)

# loss = -y*log(a)

grad_z = softmax_scores

grad_z[np.arange(batch_size)

,y]-=

1 grad_w = x.t.dot(grad_z)

grad_w /= batch_size # 梯度求平均

grad_w += reg*self.w

return loss, grad_w

CS231n 線性分類

在學習cs231n課程,邊看課程講義邊做筆記,記錄在這裡 k nn分類器的缺點 分類器必須記住所有訓練資料並將其儲存起來,以便於未來測試資料用於比較。這在儲存空間上是低效的,資料集的大小很容易就以gb計。對乙個測試影象進行分類需要和所有訓練影象作比較,演算法計算資源耗費高。概述 這種方法主要有兩部分...

CS231n課程筆記 線性分類

1 該分類器必須記住所有訓練資料並將其儲存起來,方便和未來資料進行比較,但這在儲存空間上是低效的。2 對乙個測試影象進行分類需要和所有訓練影象作比較,在計算上,資源耗費高。評分函式是原始影象資料到類別分值的對映。另乙個損失函式是用來量化 分類標籤的得分與真實標籤之間的一致性的。該方法可轉化為乙個最優...

cs231n 學習 前言

吐槽 我為啥學這個 學這門課之前,到官網 要科學上網哦 查了下相關資訊,有部分需求 要求1,得會 python 且熟悉 c c 其實我是不會 python 的,但語言只是一種工具,不該成為鴻溝,且這麼流行的語言上手也不應該難吧 盲目自信一把 要求2,微積分和線性代數,嗯,這個不是問題。要求3,概率統...