Softmax迴歸程式碼詳解
簡介
Sfotmax迴歸分析是logistic迴歸分析在多個分類問題上面的發展。
Logistic迴歸中,訓練集由m個標籤樣本組合構成:
對於給定的測試輸入 ,我們想用假設函式針對每一個類別j估算出概率值 p(y=j|x)。也就是說,我們想估計 x 的每一種分類結果出現的概率。,我們的假設函式將要輸出一個 k維的向量(向量元素的和為1)來表示這 個估計的概率值。具體地說,我們的假設函式h(x)形式如下:
為了方便起見,我們同樣使用符號theta來表示全部的模型引數。在實現Softmax迴歸時,將 theta用一個 k*(n+1)的矩陣來表示會很方便,該矩陣是將按行羅列起來得到的,如下所示:
程式碼詳解部分
損失函式和導數程式碼詳解
M = bsxfun(@minus,theta*data,max(theta*data, [], 1));
M = exp(M);
p = bsxfun(@rdivide, M, sum(M));
cost = -1/numCases * groundTruth(:)' * log(p(:)) +lambda/2 * sum(theta(:) .^ 2);
%10個類,每行代表每一類的引數,因為輸入資料為28*28=784個特徵,所以每行有784個引數。
2.2 簡化冗餘引數
M =bsxfun(@minus,theta*data,max(theta*data, [], 1));%
2.3計算每個樣本的類概率
M = exp(M);
p = bsxfun(@rdivide, M, sum(M));
sum(M),對矩陣的每列進行求和;做除法後,M的每列的每個結果,除以該列的總和;這一項對概率分佈進行歸一化,使得所有概率之和為 1。
%每列為每個樣本對10個分類的概率,共計6000個樣本。
2.4計算損失函式
cost = -1/numCases * groundTruth(:)' * log(p(:)) +lambda/2 * sum(theta(:) .^ 2);
2.4.1構造示性函式(示性函式的矩陣表示)
groundTruth = full(sparse(labels, 1:numCases, 1));
label1=labels(1:10,1)%提取labels集合的前十個標籤
我的疑問:按照矩陣乘法,最後的結果應該是一個6000*6000的大矩陣;但是運算結果是一個數值。
按照損失函式的公式:對於每個樣本,內層先遍歷每個分類j從1到10;若符合標籤分類,則示性函式值為1,然後取其對應的概率Pij;讓後遍歷第二個樣本,並計算其正確分類的概率值,最後求和,作為最後損失函式值。
按照我的理解:
groundTruth(:)轉制後groundTruth(:)' 為6000*10的矩陣;每行大部分元素值為0,只有對應正確分類為1的示性矩陣;應該是轉制後每一行與 log(p(:))的第一列對應相乘;求得樣本1的損失函式值,然後示性矩陣的第二行與log(p(:))的第二例對應相乘;依照此方法計算每個樣本的損失函式值,最後求和。
但是按照matlab矩陣運算的法則,應該是6000*6000的矩陣;為啥會得到一個數值呢?難道是係數矩陣乘法的原因麼,百度了一下,但是沒有找到答案。求大神解答
2.5計算導數
thetagrad = -1/numCases * (groundTruth - p) * data' +lambda * theta;
這個就不解釋了,看上面的程式碼估計就很好理解了。
相關推薦
Softmax迴歸程式碼詳解
簡介 Sfotmax迴歸分析是logistic迴歸分析在多個分類問題上面的發展。 Logistic迴歸中,訓練集由m個標籤樣本組合構成: 對於給定的測試輸入 ,我們想用假設函式針對每一個類別j估算出概率值 p(y=j|x)。也就是說,我們想估計 x 的每一種分類結果出
DeepLearning tutorial(1)Softmax迴歸原理簡介+程式碼詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
二十行貪吃蛇程式碼詳解
文章目錄 完整原始碼 詳解 完整原始碼 原文:https://blog.csdn.net/hj7jay/article/details/51011269 <!doctype html> <html> <bod
TensorFlow中Sequence-to-Sequence樣例程式碼詳解
在NLP領域,sequence to sequence模型有很多應用,比如機器翻譯、自動應答機器人等。在看懂了相關的論文後,我開始研讀TensorFlow提供的原始碼,剛開始看時感覺非常晦澀,現在基本都弄懂了,我在這裡主要介紹Sequence-to-Sequence Models用到
TensorFlow中RNN樣例程式碼詳解
關於RNN的理論部分已經在上一篇文章中講過了,本文主要講解RNN在TensorFlow中的實現。與theano不同,TensorFlow在一個更加抽象的層次上實現了RNN單元,所以呼叫tensorflow的API來實現RNN是比較容易的。這裡先介紹TensorFlow中與RNN相關的
優化版本對生成對抗網路生成手寫數字集(附程式碼詳解)
# 先匯入必要的庫 import os import cv2 import tensorflow as tf import numpy as np # 把結果儲存到本地的一個庫 import pickle import matplotlib.pyplot as plt from tensor
擷取拼接成新的字串System.arraycopy()如何一分鐘快速掌握(示例程式碼詳解)
//該示例程式碼直接執行即可,喜歡我的文章請關注我,你們是我動力的源泉,謝謝 public static void main(String[] args) { //宣告一個字串型別的變數,在實際開發中變數為獲取的引數 String signDate="AAAAAAAAAAAAAAAAAAAA
進階版Venn plot:Upset plot入門實戰程式碼詳解——UpSetR包介紹
網上已有一些帖子講解了Upset plot的背景知識和實現方法,本文旨在從實戰角度出發,解讀Upset plot實現的一些途徑及其優劣勢以及如何通過upsetR包實現Upset plot的繪製,並提供程式碼和input格式示例。另博主在使用
nginx rtmp module 程式碼詳解 各模組主要功能
ngx_rtmp_dash_module http模組裡播放MPEG-DASH相關處理 ngx_rtmp_mp4_module 主要支援rtmp MP4這塊點播相關功能,支援seek操作 ngx_rtmp_flv_module 主要是flv檔案格式的點播相關功能,支援seek操作 ng
使用派克斯軟體連線時最常出現的錯誤程式碼詳解
在使用派克斯軟體時,通常會有各種各樣的錯誤出現而導致連線不上,大家若自己觀察就會發現,凡是連不上的都會出現連不上的錯誤程式碼提示,這就是錯誤資訊,錯誤編碼或兩者同時出現。以下主要是常見的錯誤程式碼資訊的一覽表,也是對出現錯誤的詳解及處理方式。 錯誤程式碼1: 連線伺服器失敗。請確認網路連
SparkStream WordCount程式碼詳解
下面我要引用的程式碼來自於sparkStream的官網案例,案例內容為從kafka讀取資料進行wordcount計算 package org.apache.spark.examples.streaming; import java.util.HashMap; import java.util.
OHEM演算法及Caffe程式碼詳解
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u014380165/article/details/73148073 這是CVPR2016的一篇論文,用於目標檢測,本篇博文先介紹這個演算法,然後介紹其Caffe程
batchnorm原理及程式碼詳解(筆記2)
Batchnorm原理詳解 前言:Batchnorm是深度網路中經常用到的加速神經網路訓練,加速收斂速度及穩定性的演算法,可以說是目前深度網路必不可少的一部分。 本文旨在用通俗易懂的語言,對深度學習的常用演算法–batchnorm的原理及其程式碼實現做一個詳細的解讀。本文主要包括以下幾個
【第5篇】TypeScript塊module的案例程式碼詳解
https://blog.csdn.net/jilongliang/article/details/47355263 6.1分多個ts檔案實現module塊 Validation.ts程式碼 module Validation{
HTTP 返回狀態程式碼詳解
如果某項請求傳送到您的伺服器要求顯示您網站上的某個網頁(例如,使用者通過瀏覽器訪問您的網頁或 Googlebot 抓取網頁時),伺服器將會返回 HTTP 狀態程式碼以響應請求。 1xx (臨時響應) 表示臨時響應並需要請求者繼續執行操作的狀態程式碼。 &n
DeepLearning tutorial(4)CNN卷積神經網路原理簡介+程式碼詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
隱馬爾科夫演算法之實現簡易版的拼音輸入法程式碼詳解
這段時間瞭解了隱馬爾科夫演算法,然後拼音輸入法的核心就是HMM,然後從github上找了一個輸入法實現的程式碼來更透徹的理解演算法,本文程式碼來源:https://github.com/LiuRoy/Pinyin_Demo,如果侵權,請聯絡我刪除!!! 一、 拼音輸入法的原理概述 1.主要原
DeepLearning tutorial(3)MLP多層感知機原理簡介+程式碼詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
STM32循跡避障小車製作程式碼詳解(簡單實現版)
寫在最前:最近由於需要製作了一個循跡避障小車,製作比較簡單但是還是出現了很多bug,因此在部落格中記錄一下,希望對後期需要製作的能有所幫助,小車由PWM訊號+L293D驅動。(二輪驅動,第三輪為自由輪) 要求:小車要求循跡避障,有兩種避障策略,在循跡黑線上遇到障礙物停車,循跡黑線外遇到障礙物要避
Android + Appium 自動化測試完整的環境配置及程式碼詳解
環境的的搭建 參考大神部落格:https://www.cnblogs.com/fnng/p/4540731.html 該部落格有一套詳細的入門教程,奈何時間有點久遠有些東西不能用了,但是參考價值還是有滴。 1.安裝各種SDK jre必須1.8以上 AndroidSDK需要8.0以下的測試,