最簡單的線性分類器:
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,概率統...