1. 程式人生 > >梳理caffe程式碼math_functions(一)

梳理caffe程式碼math_functions(一)

轉載 http://blog.csdn.net/langb2014/article/details/50986678

先從caffe中使用的函式入手看看:

  1. #include <boost/math/special_functions/next.hpp>
  2. #include <boost/random.hpp>
  3. #include <limits>
  4. #include "caffe/common.hpp"
  5. #include "caffe/util/math_functions.hpp"
  6. #include "caffe/util/rng.hpp"
  7. namespace
     caffe {  
  8. //math_function 定義了caffe 中用到的一些矩陣操作和數值計算的一些函式
  9. /* 
  10.  *功能: C=alpha*A*B+beta*C 
  11.  *A,B,C 是輸入矩陣(一維陣列格式) 
  12.  *CblasRowMajor :資料是行主序的(二維資料也是用一維陣列儲存的) 
  13.  *TransA, TransB:是否要對A和B做轉置操作(CblasTrans CblasNoTrans) 
  14.  *M: A、C 的行數 
  15.  *N: B、C 的列數 
  16.  *K: A 的列數, B 的行數 
  17.  *lda : A的列數(不做轉置)行數(做轉置) 
  18.  *ldb: B的列數(不做轉置)行數(做轉置)
     
  19. */
  20. template<>  
  21. void caffe_cpu_gemm<float>(const CBLAS_TRANSPOSE TransA,  
  22.     const CBLAS_TRANSPOSE TransB, constint M, constint N, constint K,  
  23.     constfloat alpha, constfloat* A, constfloat* B, constfloat beta,  
  24.     float* C) {  
  25.   int lda = (TransA == CblasNoTrans) ? K : M;  
  26.   int ldb = (TransB == CblasNoTrans) ? N : K;  
  27.   cblas_sgemm(CblasRowMajor, TransA, TransB, M, N, K, alpha, A, lda, B,  
  28.       ldb, beta, C, N);  
  29. }  
  30. /*計算矩陣乘法的函式之一是 cblas_sgemm,使用單精度實數,另外還有對應雙精度實數, 
  31. 單精度複數和雙精度複數的函式。在此以 cblas_sgemm為例。 
  32. 函式定義為: 
  33. void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, 
  34. const enum CBLAS_TRANSPOSE TransB, const int M, const int N, 
  35. const int K, const float alpha, const float  *A, 
  36. const int lda, const float  *B, const int ldb, 
  37. const float beta, float  *C, const int ldc) 
  38. 得到的結果是: 
  39.  C = alpha*op( A )*op( B ) + beta*C 
  40. const enum CBLAS_ORDER Order,這是指的資料的儲存形式,在CBLAS的函式中無論一維還是二維資料 
  41. 都是用一維陣列儲存,這就要涉及是行主序還是列主序,在C語言中陣列是用 行主序,fortran中是列 
  42. 主序。我還是習慣於是用行主序,所以這個引數是用CblasRowMajor,如果是列主序的話就是 CblasColMajor。 
  43. const int M,矩陣A的行,矩陣C的行 
  44. const int N,矩陣B的列,矩陣C的列 
  45. const int K,矩陣A的列,矩陣B的行 
  46. const float alpha, const float beta,計算公式中的兩個引數值,如果只是計算C=A*B,則alpha=1,beta=0 
  47. const float  *A, const float  *B, const float  *C,矩陣ABC的資料 
  48. const int lda, const int ldb, const int ldc,在BLAS的文件裡,這三個引數分別為ABC的行數, 
  49. 但是實際使用發現,在CBLAS裡應該是列數。 
  50. */
  51. template<>  
  52. void caffe_cpu_gemm<double>(const CBLAS_TRANSPOSE TransA,  
  53.     const CBLAS_TRANSPOSE TransB, constint M, constint N, constint K,  
  54.     constdouble alpha, constdouble* A, constdouble* B, constdouble beta,  
  55.     double* C) {  
  56.   int lda = (TransA == CblasNoTrans) ? K : M;  
  57.   int ldb = (TransB == CblasNoTrans) ? N : K;  
  58.   cblas_dgemm(CblasRowMajor, TransA, TransB, M, N, K, alpha, A, lda, B,  
  59.       ldb, beta, C, N);  
  60. }  
  61. /* 
  62. 功能: y=alpha*A*x+beta*y 
  63. 其中X和Y是向量,A 是矩陣 
  64. M:A 的行數 
  65. N:A 的列數 
  66. cblas_sgemv 中的 引數1 表示對X和Y的每個元素都進行操作 
  67. */
  68. template <>  
  69. void caffe_cpu_gemv<float>(const CBLAS_TRANSPOSE TransA, constint M,  
  70.     constint N, constfloat alpha, constfloat* A, constfloat* x,  
  71.     constfloat beta, float* y) {  
  72.   cblas_sgemv(CblasRowMajor, TransA, M, N, alpha, A, N, x, 1, beta, y, 1);  
  73. }  
  74. template <>  
  75. void caffe_cpu_gemv<double>(const CBLAS_TRANSPOSE TransA, constint M,  
  76.     constint N, constdouble alpha, constdouble* A, constdouble* x,  
  77.     constdouble beta, double* y) {  
  78.   cblas_dgemv(CblasRowMajor, TransA, M, N, alpha, A, N, x, 1, beta, y, 1);  
  79. }  
  80. /* 
  81. 功能: Y=alpha*X+Y 
  82. N:為X和Y中element的個數 
  83. */
  84. template <>  
  85. void caffe_axpy<float>(constint N, constfloat alpha, constfloat* X,  
  86.     float* Y) { cblas_saxpy(N, alpha, X, 1, Y, 1); }  
  87. template <>  
  88. void caffe_axpy<double>(constint N, constdouble alpha, const

    相關推薦

    梳理caffe程式碼math_functions()

    轉載 http://blog.csdn.net/langb2014/article/details/50986678 先從caffe中使用的函式入手看看: #include <boost/math/special_functions/next.hpp> #in

    caffe程式碼梳理

    caffe目錄結構 命令:tree -d build ->.build_release //編譯結果存放處,子目錄結構與主目錄類似 cmake //使用CMake編譯時會用到,不關注 data //用與存放原始資料和資料獲取指令碼 distribute //編譯後生成釋出包的位置,

    梳理caffe代碼blob(三)

    才幹 禁止 坐標 偏移 內存空間 function actor 不同 blog 貫穿整個caffe的就是數據blob: #ifndef CAFFE_BLOB_HPP_ #define CAFFE_BLOB_HPP_ #include <algorith

    NVCC src/caffe/util/math_functions.cu

    屏蔽 版本 new caf 需要 nco int try UNC 解決辦法:由於安裝的cuda版本是7.5,當前下載的caffe版本比較新,需要修改裏面的makefile文件,屏蔽下面的代碼,cuda<8.0 In the Makefile.exa

    用java程式碼構建棵平衡二杈樹:

    用java程式碼構建一棵平衡二杈樹: 構建的要點在於: 1. 每新增一個節點要遞迴地返回所有經過的父節點(要算好高度) 2. 計算每個節點的左右樹高度差 3. 如果高度差為2,認清要做哪種旋轉:LL, LR, RR, RL 4. 做旋轉時注意,所要移動節點之間的關係 程式碼如

    200行程式碼行行教你自制微信機器人

    參加 2018 AI開發者大會,請點選 ↑↑↑ 作者|上海小胖,四大諮詢的TechLead,mongoDB Professional 獲得者。「Python專欄」專注Python領域的各種技術:爬蟲、DevOps、人工智慧、Web開發等。還有「大航海計劃」,各種內推活

    java程式碼個數組分為多個等長度的陣列

    首先這個是為了實現一次請求的資料量不會由於返回的資料量過大導致記憶體溢位,所以分批獲取   @SuppressWarnings("unused") public static List<String> getList(int targ,List<String

    caffe學習筆記windows下配置caffe問題

          按照https://blog.csdn.net/whu_gcoder_2017/article/details/71479944上的教程 從github上下載了caffe包 安裝了vs2013 編譯專案nuget的時候遇到了問題

    OHEM演算法及Caffe程式碼詳解

    版權宣告:本文為博主原創文章,未經博主允許不得轉載。    https://blog.csdn.net/u014380165/article/details/73148073 這是CVPR2016的一篇論文,用於目標檢測,本篇博文先介紹這個演算法,然後介紹其Caffe程

    資料結構經典例題解析C/C++程式碼實現()

    考研需要吧,雖然挺基礎的,但是還是要練習下的,而且,還可以幫助一些其他同樣需要這些程式碼的朋友。 實現最基礎的資料結構建議是用C語言,這樣子很多細節都可以很好地把握,當然,如果用STL可以簡單地實現,那麼我也會實現一下。 第一題 題目 編一C程式,它能根據讀入的資

    OpenCV下車牌定位演算法實現程式碼

                 分類:            影象處理

    (Android第一行程式碼實驗)活動的最佳實踐

    活動的最佳實踐    1.知曉當前是在哪一個活動         這個技巧將教會你,如何根據程式當前的介面就能判斷出這是哪一個活動。  首先需要新建一個 BaseActivity 繼承自

    關於MATLAB轉C++程式碼

    沒時間寫,上圖快一點, 1、寫好主執行檔案,m_18_10_30.m,並且執行 2、單擊MATLAB Coder 3、進入,選擇函式(而不是執行檔案) 4、Next,選擇執行的檔案,m_18_10_30.m 5、''let me enter...'',是開啟

    程式碼整潔

    什麼是程式碼整潔     今天來說說“程式碼整潔”,這是個永恆的話題,自從第一行程式碼被寫出來後,優秀的程式設計師們就不停地通過各種方法、方式和工具來使自己的程式碼看來整潔美觀。那為什麼我們要做程式碼整潔?不管你做過幾年程式設計,你一定被某個傻缺的糟糕程式碼絆倒過氣的找不到北;同時自己也

    AngularJs依賴注入的一個錯誤,程式碼不報錯但程式碼句都不執行

    百度找來找去沒找到答案,最後想到還是去看看官方文件吧 結果:順序必須完全一致,我檢查來檢查去沒想到是這個問題。 以後找不到bug產生的原因多看看文件吧。。。 又出現bug了,接著上面那個bug來,改完上面那個bug後chrome報錯了 TypeError: $cookies.

    flutter 程式碼結構

    Scaffold  提供導航欄、標題、主螢幕widget樹的body屬性。 Center widget 可以將子widget樹居中 Stateless widgets 沒有狀態的,屬性不能變 (不能儲存資料) Stateful  widgets 有狀態的 (儲存資料)

    70行python程式碼製作款簡易的音樂播放器

    今天整理了以前的python作業程式碼,發現了一些有趣的小東西,比如下面這個,大概70行程式碼製作一款簡易的音樂播放器。 install some packages pip install pygame pygame是跨平臺Python模組,專為電子遊戲設計,包含影象

    陣列之蛇型矩陣程式碼

    我在多次的演算法比賽中遇到了蛇型矩陣問題都沒有做出來,今天我在《演算法競賽入門經典》這本書上看到了,一段優美的解決蛇型矩陣問題的程式碼。請原諒我的無知,我看的程式碼少寫的程式碼也不多。如果你認為這段程式碼不好不優美請多多指教。我在這裡謝謝大家了。 #include<stdio.h>

    14 SVM - 程式碼案例 - 鳶尾花資料SVM分類

    SVM的章節已經講完,具體內容請參考:《01 SVM - 大綱》 常規操作: 1、標頭檔案引入SVM相關的包2、防止中文亂碼3、去警告4、讀取資料5、資料分割訓練集和測試集 8:2 import numpy as np import pandas as pd import matplotlib as m

    Caffe程式碼解析(3)

    本文轉自:http://alanse7en.github.io/caffedai-ma-3/ 在上文對Google Protocol Buffer進行了簡單的介紹之後,本文將對caffe的Command Line Interfaces進行分析。 本文將從一個比較巨集觀的層面上去了解caffe