转来的,来自:http://www.cnblogs.com/huashiyiqike/p/3886670.html

总结的很赞,转到这里,留一下笔记。感觉cblas的函数名字很好记的,试着去找过源代码,但是是fortran的,我当时写过的那些fortran程序早忘记了。

Y=alpha * X +beta*Y

  1. Y=alpha * X +beta*Y
  2.  
  3. template <>
  4. void caffe_cpu_axpby<float>(const int N, const float alpha, const float* X,
  5. const float beta, float* Y) {
  6. cblas_saxpby(N, alpha, X, 1, beta, Y, 1);
  7. }
  8.  
  9. template <>
  10. void caffe_cpu_axpby<double>(const int N, const double alpha, const double* X,
  11. const double beta, double* Y) {
  12. cblas_daxpby(N, alpha, X, 1, beta, Y, 1);
  13. }
  14.  
  15. cblas_dscal(N, beta, Y, incY); Y=Y*beta
  16. cblas_daxpy(N, alpha, X, incX, Y, incY); Y= (alpha * X) + Y)

  

Y=alpha * X + Y 

  1. template <>
  2. void caffe_axpy<float>(const int N, const float alpha, const float* X,
  3. float* Y) { cblas_saxpy(N, alpha, X, 1, Y, 1); }
  4.  
  5. template <>
  6. void caffe_axpy<double>(const int N, const double alpha, const double* X,
  7. double* Y) { cblas_daxpy(N, alpha, X, 1, Y, 1); }

  

  1. DEFINE_VSL_BINARY_FUNC(Add, y[i] = a[i] + b[i]);
  2. DEFINE_VSL_BINARY_FUNC(Sub, y[i] = a[i] - b[i]);
  3. DEFINE_VSL_BINARY_FUNC(Mul, y[i] = a[i] * b[i]);
  4. DEFINE_VSL_BINARY_FUNC(Div, y[i] = a[i] / b[i]);
  5.  
  6. template <>
  7. void caffe_add<float>(const int n, const float* a, const float* b,
  8. float* y) {
  9. vsAdd(n, a, b, y);
  10. }
  11.  
  12. template <>
  13. void caffe_add<double>(const int n, const double* a, const double* b,
  14. double* y) {
  15. vdAdd(n, a, b, y);
  16. }

  

y=x;

  1. template <>
  2. void caffe_copy<float>(const int N, const float* X, float* Y) {
  3. cblas_scopy(N, X, 1, Y, 1);
  4. }
  5.  
  6. template <>
  7. void caffe_copy<double>(const int N, const double* X, double* Y) {
  8. cblas_dcopy(N, X, 1, Y, 1);
  9. }
  10.  
  11. template <>
  12. void caffe_gpu_copy<float>(const int N, const float* X, float* Y) {
  13. CUBLAS_CHECK(cublasScopy(Caffe::cublas_handle(), N, X, 1, Y, 1));
  14. }
  15.  
  16. template <>
  17. void caffe_gpu_copy<double>(const int N, const double* X, double* Y) {
  18. CUBLAS_CHECK(cublasDcopy(Caffe::cublas_handle(), N, X, 1, Y, 1));
  19. }

  Computes alpha*x*y' + A.

  1. cblas_sger
  2. Multiplies vector X by the transform of vector Y, then adds matrix A (single precison).
  3.  
  4. Multiplies vector X by the transform of vector Y, then adds matrix A (single precison).
  5. void cblas_sger (
  6. const enum CBLAS_ORDER Order,
  7. const int M,
  8. const int N,
  9. const float alpha,
  10. const float *X,
  11. const int incX,
  12. const float *Y,
  13. const int incY,
  14. float *A,
  15. const int lda
  16. );

 

  1. Y(vetor)←αAX + βY
  2. This function multiplies A * X (after transposing A, if needed) and multiplies the resulting matrix by alpha.
  3. It then multiplies vector Y by beta. It stores the sum of these two products in vector Y.
  4. template <>
  5. void caffe_cpu_gemv<float>(const CBLAS_TRANSPOSE TransA, const int M,
  6. const int N, const float alpha, const float* A, const float* x,
  7. const float beta, float* y) {
  8. cblas_sgemv(CblasRowMajor, TransA, M, N, alpha, A, N, x, 1, beta, y, 1);
  9. }

  

 C(matrix)←αAB + βC

  1. template<typename T>
  2. void gpu_multmat(T* A, T* B, T* C, int M,int K,int N){
  3. const T alpha = 1,beta=0;
  4. caffe_gpu_gemm(CblasNoTrans,CblasNoTrans,M,N,K,alpha,A,B,beta,C);
  5. }
  6.  
  7. template<>
  8. void caffe_cpu_gemm<float>(const CBLAS_TRANSPOSE TransA,
  9. const CBLAS_TRANSPOSE TransB, const int M, const int N, const int K,
  10. const float alpha, const float* A, const float* B, const float beta,
  11. float* C) {
  12. int lda = (TransA == CblasNoTrans) ? K : M;
  13. int ldb = (TransB == CblasNoTrans) ? N : K;
  14. cblas_sgemm(CblasRowMajor, TransA, TransB, M, N, K, alpha, A, lda, B,
  15. ldb, beta, C, N);
  16. }

  

  1. A=M*N B=M*K
  2. C=A'*B N M K
  3.  
  4. template<typename T>
  5. void cpu_multTmat(T* A, T* B, T* C, int M,int K,int N){
  6. const T alpha = 1,beta=0;
  7. caffe_cpu_gemm(CblasTrans,CblasNoTrans,M,N,K,alpha,A,B,beta,C);
  8. // cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, M, N, K, alpha, A, M, B, K, beta, C, M);
  9. }
  10. A=M*N B=N*K
  11. C=A*B M N K
  12.  
  13. template<typename T>
  14. void cpu_multmat(T* A, T* B, T* C, int M,int K,int N){
  15. const T alpha = 1,beta=0;
  16. caffe_cpu_gemm(CblasNoTrans,CblasNoTrans,M,N,K,alpha,A,B,beta,C);
  17. // cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, M, N, K, alpha, A, M, B, K, beta, C, M);
  18. }

  

caffe中各种cblas的函数使用总结的更多相关文章

  1. caffe中权值初始化方法

    首先说明:在caffe/include/caffe中的 filer.hpp文件中有它的源文件,如果想看,可以看看哦,反正我是不想看,代码细节吧,现在不想知道太多,有个宏观的idea就可以啦,如果想看代 ...

  2. 在caffe中使用hdf5的数据

    caffe默认使用的数据格式为lmdb文件格式,它提供了把图片转为lmdb文件格式的小程序,但是呢,我的数据为一维的数据,我也要分类啊,那我怎么办?肯定有办法可以转为lmdb文件格式的,我也看了一些源 ...

  3. caffe中各层的作用:

    关于caffe中的solver: cafffe中的sover的方法都有: Stochastic Gradient Descent (type: "SGD"), AdaDelta ( ...

  4. (原)torch和caffe中的BatchNorm层

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6015990.html BatchNorm具体网上搜索. caffe中batchNorm层是通过Batc ...

  5. CAFFE中训练与使用阶段网络设计的不同

    神经网络中,我们通过最小化神经网络来训练网络,所以在训练时最后一层是损失函数层(LOSS), 在测试时我们通过准确率来评价该网络的优劣,因此最后一层是准确率层(ACCURACY). 但是当我们真正要使 ...

  6. caffe中在某一层获得迭代次数的方法以及caffe编译时报错 error: 'to_string' is not a member of 'std'解决方法

    https://stackoverflow.com/questions/38369565/how-to-get-learning-rate-or-iteration-times-when-define ...

  7. caffe中关于(ReLU层,Dropout层,BatchNorm层,Scale层)输入输出层一致的问题

    在卷积神经网络中.常见到的激活函数有Relu层 layer { name: "relu1" type: "ReLU" bottom: "pool1&q ...

  8. Batch Normalization 与 Caffe中的 相关layer

    在机器学习领域,通常假设训练数据与测试数据是同分布的,BatchNorm的作用就是深度神经网络训练过程中, 使得每层神经网络的输入保持同分布. 原因:随着深度神经网络层数的增加,训练越来越困难,收敛越 ...

  9. caffe代码阅读10:Caffe中卷积的实现细节(涉及到BaseConvolutionLayer、ConvolutionLayer、im2col等)-2016.4.3

    一. 卷积层的作用简单介绍 卷积层是深度神经网络中的一个重要的层,该层实现了局部感受野.通过这样的局部感受野,能够有效地减少參数的数目. 我们将结合caffe来解说详细是怎样实现卷积层的前传和反传的. ...

随机推荐

  1. Android 5.0以上heads up通知

    适用Android系统: 1) Android版本>= 5.0 2) 部分ROM是不支持 RemoteViews view=getRemoteViews(body,title, R.mipmap ...

  2. Linux cp命令拷贝 不覆盖原有的文件

    cp 参数说明: -i或--interactive  覆盖既有文件之前先询问用户. -r  递归处理,将指定目录下的文件与子目录一并处理. -R或--recursive  递归处理,将指定目录下的所有 ...

  3. MATLAB线性回归方程与非线性回归方程的相关计算

    每次比赛都需要查一下,这次直接总结到自己的博客中. 以这个为例子: 2.线性方程的相关计算 x=[1,2,3,4,5]';%参数矩阵 X=[ones(5,1),x];%产生一个5行一列的矩阵,后接x矩 ...

  4. ZK典型应用场景

    1. 数据发布/订阅--动态获取数据 2.Master选举 a). 利用Zk会保证无法重复创建一个已经存在的节点 b). 多个客户端同时创建,创建成功的即是master,并监控master节点,一旦m ...

  5. MVC HtmlHelper listbox用法

    主要实现MVC listbox左右移动,搜索左边用户 controller   List<userinfo> lstUserInfo = new List<userinfo>( ...

  6. Entity Framework中IQueryable, IEnumerable, IList的区别[转]

    使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的S ...

  7. Mysql 求时间 between 昨天 and 上个月的今天 等时间函数

    问题: Mysql表中一列create_time,类型datetime(YYYY-MM-DD HH:MM:SS),想获取上个月今天到昨天的数据. select * from 表名 where date ...

  8. Functional language(函数式编程语言)初步了解

    对于函数式语言并不太了解,查询了百度.博客.知乎等做了以下总结. What 函数式语言(functional language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分 ...

  9. (转)ArcEngine读取数据(数据访问)

    读取和访问数据是进行任何复杂的空间分析及空间可视化表达的前提,ArcGIS支持的数据格式比较丰富,下面就这些格式Shapefile.Coverage.Personal Geodatabase.Ente ...

  10. java右移>> 无符号右移>>>

    >>>是无符号右移,在高位补零 >>是带符号的右移,如果是正数则在高位补零,负数则补1 int a = -1; System.out.println(a>>1 ...