cs231n作業1--softmax
1、思想:
與SVM不同,SVM直接利用線性對映的結果進行計算損失值,而softmax需要對線性對映得到的值進行指數歸一化,然後在進行損失值計算。在SVM損失函式中使用的是折葉函式,而在softmax中使用的交叉熵函式。
2、損失函式公式:
每個測試樣本的損失值計算
所有測試樣本的損失值計算
4、程式碼實現:
softmax.py
import numpy as np
from random import shuffle
#from past.builtins import xrange
def softmax_loss_naive(W, X, y, reg):
"""
Softmax loss function, naive implementation (with loops)
Inputs have dimension D, there are C classes, and we operate on minibatches
of N examples.
Inputs:
- W: A numpy array of shape (D, C) containing weights.
- X: A numpy array of shape (N, D) containing a minibatch of data.
- y: A numpy array of shape (N,) containing training labels; y[i] = c means
that X[i] has label c, where 0 <= c < C.
- reg: (float) regularization strength
Returns a tuple of:
- loss as single float
- gradient with respect to weights W; an array of same shape as W
"""
# Initialize the loss and gradient to zero.
loss = 0.0
dW = np.zeros_like(W)
#############################################################################
# TODO: Compute the softmax loss and its gradient using explicit loops. #
# Store the loss in loss and the gradient in dW. If you are not careful #
# here, it is easy to run into numeric instability. Don't forget the #
# regularization! #
### ##########################################################################
dW_each = np.zeros_like(W)
num_train,dim = X.shape
num_class = W.shape[1]
f = X.dot(W)
f_max = np.reshape(np.max(f,axis=1),(num_train,1))
prob = np.exp(f-f_max)/np.sum(np.exp(f-f_max),axis=1,keepdims=True)
y_trueClass = np.zeros_like(prob)
y_trueClass[np.arange(num_train),y] = 1.0
for i in xrange(num_train):
for j in xrange(num_class):
loss += -(y_trueClass[i,j]*np.log(prob[i,j]))
dW_each[:,j] = -(y_trueClass[i,j]-prob[i,j])*X[i,:]
dW +=dW_each
loss /=num_train
loss +=0.5*reg*np.sum(W*W)
dW /=num_train
W += reg*W
#############################################################################
# END OF YOUR CODE #
#############################################################################
return loss, dW
def softmax_loss_vectorized(W, X, y, reg):
"""
Softmax loss function, vectorized version.
Inputs and outputs are the same as softmax_loss_naive.
"""
# Initialize the loss and gradient to zero.
loss = 0.0
dW = np.zeros_like(W)
#############################################################################
# TODO: Compute the softmax loss and its gradient using no explicit loops. #
# Store the loss in loss and the gradient in dW. If you are not careful #
# here, it is easy to run into numeric instability. Don't forget the #
# regularization! #
#############################################################################
num_train,dim = X.shape
f = X.dot(W)
f_max = np.reshape(np.max(f,axis=1),(num_train,1))
prob = np.exp(f-f_max)/np.sum(np.exp(f-f_max),axis=1,keepdims=True)
y_trueClass = np.zeros_like(prob)
y_trueClass[range(num_train),y] = 1.0
loss += -np.sum(y_trueClass*np.log(prob))/num_train+0.5*reg*np.sum(W*W)
dW += -np.dot(X.T,y_trueClass - prob)/num_train + reg*W
#############################################################################
# END OF YOUR CODE #
#############################################################################
return loss, dW
softmax.ipynb
# Use the validation set to tune hyperparameters (regularization strength and
# learning rate). You should experiment with different ranges for the learning
# rates and regularization strengths; if you are careful you should be able to
# get a classification accuracy of over 0.35 on the validation set.
from cs231n.classifiers import Softmax
results = {}
best_val = -1
best_softmax = None
learning_rates = [1e-7, 5e-7]
regularization_strengths = [2.5e4, 5e4]
################################################################################
# TODO: #
# Use the validation set to set the learning rate and regularization strength. #
# This should be identical to the validation that you did for the SVM; save #
# the best trained softmax classifer in best_softmax. #
################################################################################
num_splt_lr = 3
num_splt_rs = 8
for i in xrange(num_splt_lr):
for j in xrange(num_splt_rs):
learning_rate_ij = learning_rates[0] + i * (learning_rates[1] - learning_rates[0]) / num_splt_lr
reg_ij = regularization_strengths[0] + j * (regularization_strengths[1] - regularization_strengths[0])/ num_splt_rs
softmax = Softmax()
loss_hist = softmax.train(X_train, y_train, learning_rate=learning_rate_ij, reg=reg_ij,
num_iters=1500, verbose=False)
y_train_pred = softmax.predict(X_train)
accuracy_train = np.mean(y_train == y_train_pred)
y_val_pred = softmax.predict(X_val)
accuracy_val = np.mean(y_val == y_val_pred)
results[(learning_rate_ij, reg_ij)] = (accuracy_train, accuracy_val)
if accuracy_val > best_val:
best_val = accuracy_val
best_softmax = softmax
################################################################################
# END OF YOUR CODE #
################################################################################
# Print out results.
for lr, reg in sorted(results):
train_accuracy, val_accuracy = results[(lr, reg)]
print('lr %e reg %e train accuracy: %f val accuracy: %f' % (
lr, reg, train_accuracy, val_accuracy))
print('best validation accuracy achieved during cross-validation: %f' % best_val)
相關推薦
cs231n作業1--softmax
1、思想: 與SVM不同,SVM直接利用線性對映的結果進行計算損失值,而softmax需要對線性對映得到的值進行指數歸一化,然後在進行損失值計算。在SVM損失函式中使用的是折葉函式,而在softmax中使用的交叉熵函式。 2、損失函式公式: 每個
CS231n 作業1 SVM+softmax+兩層神經網絡
clas 天都 dao mar ref har svm .com 成了 大概用了有小半個月的時間斷斷續續的完成了作業1,因為期間每天都還在讀論文,所以進度有些落後,不過做完感覺也是收獲頗豐。 附上地址 http://note.youdao.com/noteshare?id=
關於cs231n中作業1的SVM和Softmax線性分類器實現的感悟
1、對於複雜的含有多Wi引數的函式L求導問題,首先是分別對單個引數求偏導數,然後放置到此引數對應的矩陣的位置。在求偏導數的矩陣表示時,一般要經歷如下兩個步驟:數字計算:分解步驟,同時計算L和導數:一般情況下,L的計算分很多步,而且每一步也十分複雜,可能涉及到數值判定等。但是隻
cs231n作業:assignment1 - softmax
title: cs231n作業:assignment1 - softmax id: cs231n-1h-3 tags: cs231n homework categories: AI Deep Learning date: 2018-09-27 16:02:
Cs231n-assignment 1作業筆記
assignment 1 assignment1講解參見: https://blog.csdn.net/u014485485/article/details/79433514?utm_source=blogxgwz5 np. flatnonzero(a) 返回a的展平版本中非零的索引。 a1 = np
斯坦福CS231n作業程式碼(漢化)Assignment 1
[CS231N - Assignment1 - Q5 - Image features exercises] 編寫:郭承坤 觀自在降魔 Fanli SlyneD 校對:毛麗 總校對與稽核:寒小陽 我們已經看到,通過用輸入影象的畫素訓練的線性分類器對影
CS231n作業筆記2.1:兩層全連線神經網路的分層實現
CS231n簡介 作業筆記 1. 神經網路的分層實現 全連線前向傳播:out = x.reshape([x.shape[0],-1]).dot(w)+b 全連線後向傳播: x, w, b = cache dx, dw, db = No
CS231n 2018作業1-KNN
k = 1, accuracy = 0.235000 k = 1, accuracy = 0.237000 k = 1, accuracy = 0.258000 k = 1, accuracy = 0.242000 k = 1, accuracy = 0.227000 k = 3, accuracy = 0.
軟件工程——團隊作業1
作業1 get lan 分享 blank comm targe 訂票 alt 隊名:揚帆 隊員: 陳毅-1500802126 林鴻鋒-1500802094 -http://www.cnblogs.com/linhongfeng/MyComments.html
課程引言課後作業1
課堂 png turn win exit erp == user 應用服務器 1.網站系統開發需要掌握的技術。 Java語言、環境配置、網頁腳本語言、數據庫、應用服務器。 2.課堂測試源代碼。 <%@ page language="java" import="
linux作業1
linux1,描述計算機的組成及其功能。運算器,對數據進行加減乘除等操作控制器,控制程序的指令存儲器,儲存程序數據信息輸入設備,下指令,提高數據輸出設備,輸出結果2,按系列羅列LINUX的發行版,並描述不同發行版之間的聯系與區別。Debian: (ubuntu),dpkg包管理系統 Slackware:
網易雲課堂_C++程序設計入門(下)_第7單元:出入雖同趣,所向各有宜 – 文件輸入和輸出_第7單元 - 作業1:OJ編程
c++ detail using span 換行 tro size str cout 第7單元 - 作業1:OJ編程 查看幫助 返回 溫馨提示: 1.本次作業屬於Online Judge題目,提交後由系統即時判分。 2.學生可以在作業截止時間之前不限次數提
作業1:小型考勤登記表
btn ctype parameter edate 加油! tab wid delet basepath 這次在廣州實習了20天,收獲還比較大。不過仍需要繼續努力。這次總共布置了兩個作業,我總結一下: 登記考勤信息,查看信息——主要就是往數據庫增加數據,然後再從數據庫中讀取
python 作業1
ram 流程 控制 html 時鐘 單位 發出 電源 tar 一.編程語言的作用及與操作系統和硬件的關系 1、編程語言是程序員和電腦的溝通語言。操作系統的出現就是運行於硬件之上,來控制硬件的,我們開發時,只需要調用操作系統為我們提供的簡單而優雅的接口就可以了 二.cpu-》
老男孩python3學習,課堂作業1.2 多級菜單查詢
字典 enum dex 查詢 pre 進行 while 新華 input # Version: python3.6# Author: Gao# 多級菜單:三級菜單,可依次選擇進入子菜單,列表,字典city_dict = { "四川省": {
作業1開發一個簡單的python計算器
加減 pytho 公式 實的 group 運算 作業 得出 必須 開發一個簡單的python計算器 實現加減乘除及拓號優先級解析 用戶輸入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14
作業1
time ces index word avg num size welcome mil 1.2 public class welcome{ public static void main(String[] args){ System.out.println("Welc
第二次作業1
9.png 技術分享 線圖 es2017 -1 .com img png 二次 1.PSP 2.進度條 3.餅狀圖 4.折線圖 代碼行數 博文字數 第二次作業1
9月18日作業 1
div clas es2017 return 技術 std 分享 esp img #include<iostream> using namespace std; int main() { long long int a; a=12345
個人作業1——四則運算題目生成程序(基於控制臺)
deb nio body min 此外 list eve span i++ 一、需求分析 生成四則運算題目 控制生成題目個數 控制生成題目中數字的範圍 結果為真分數 每道題目運算符個數為3 每次運行生成的題目不能重復 保存生成的題目 在生成題目的同時,計算出所有題目的答案