1. 程式人生 > >Softmax迴歸程式碼詳解

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));%

減去theta*data中結果數值最大的數,首先由於softmax模型過度引數化,引數減去一個常數多結果沒有影響(詳細探討見andrew ng教程);其次,由於要對引數進行指數exp的計算,可能由於為了防止指數的值過大,所以減去一個最大的結果。

2.3計算每個樣本的類概率

M = exp(M);

p = bsxfun(@rdivide, M, sum(M));

sumM),對矩陣的每列進行求和;做除法後,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的大矩陣;但是運算結果是一個數值。

按照損失函式的公式:


對於每個樣本,內層先遍歷每個分類j110;若符合標籤分類,則示性函式值為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以下的測試,