跑**,softmax
最開始,寫softmax_loss_*****用迴圈求loss和gradient
softmax分類器使用交叉熵loss,公式為
程式設計實現時候稍微利用了廣播,10個分數一起算的
for i in range(num_train):
scores = x[i].dot(w)
scores -= max(scores)#避免溢位
scores = np.exp(scores) / np.sum(np.exp(scores))
loss += - np.log(scores[y[i]])
為什麼初始計算出來的loss約等於0.1
因為初始w約等於0,按照公式計算,相當於
求導計算上面的公式,得到梯度,過程很多,但是最後基本上都約掉了
if j == y[i]:
dw[:,j] += (** - 1) * x[i]
else:
dw[:,j] += ** * x[i]
**是log裡面那部分
接下來向量化
scores = x.dot(w)
scores -= np.max(scores, axis=1, keepdims=true)
scores = np.exp(scores) / np.sum(np.exp(scores), axis=1, keepdims=true)
dw = np.copy(scores)
dw[range(num_train),y] -= 1
dw = x.t.dot(dw)
loss -= np.log(scores[range(num_train),y])
loss = np.sum(loss)
這裡注意:dw[range(num_train),y]和dw[:,y]並不一樣,shape分別是(500,) 和(500, 500)
第一種是每次是第i行和y[i]構成元組,取dw[i,y[i]],第二種是所有行和y[i]
剩下的部分和svm類似
cs231n訓練營學習筆記(9)卷積和池化
卷積具有部分連線和權重共享的特徵,共享的權重就是卷積核,因為它劃過所有影象分別和影象切片相乘,相當於很多的卷積核共同組成權重。從函式角度解讀卷積神經網路工作原理 每個卷積核 感受野receptive field 對應輸出乙個啟用對映 activation map 每層convnet由多個卷積核輸出的...
CS231n 學習筆記(五)
注意 在計算機上計算梯度的乙個簡單方法是有限差分法 迭代計算所有w維度,一直重複下去直到計算完dw。這種方法是數值梯度法,過程非常慢。實際上,我們會使用另一種分析梯度法,提前計算出梯度的表示式 除錯策略 使用數值梯度作為單元測試來確保解析梯度是正確的 梯度下降演算法 注意 隨機梯度下降 之前我們定義...
cs231n筆記總結
cs231n的課程以及作業都完成的差不多了,後續的課程更多的涉及到卷積神經網路的各個子方向了,比如語義分割 目標檢測 定位 視覺化 遷移學習 模型壓縮等等。assignment3有涉及到這些中的一部分,但需要深入了解的話還是得看 了。所以在看 前把之前已學的知識,筆記和作業 一起做個整理。部落格裡主...