C = α A T r a n s A B T r a n s B + β C C =\alpha A^{TransA}B^{TransB}+\beta C C=αATransABTransB+βC
void caffe_cpu_gemm(const CBLAS_TRANSPOSE TransA,
const CBLAS_TRANSPOSE TransB, const int M, const int N, const int K,
const Dtype alpha, const Dtype* A, const Dtype* B, const Dtype beta,
Dtype* C);
Y = α A T r a n s A X + β Y Y=\alpha A^{TransA}X + \beta Y Y=αATransAX+βY
template <typename Dtype>
void caffe_cpu_gemv(const CBLAS_TRANSPOSE TransA, const int M, const int N,const Dtype alpha, const Dtype* A, const Dtype* x, const Dtype beta,Dtype* y);
Y = α X + Y Y = \alpha X +Y Y=αX+Y
template <typename Dtype>
void caffe_axpy(const int N, const Dtype alpha, const Dtype* X,Dtype* Y);
Y = α X + β Y Y = \alpha X +\beta Y Y=αX+βY
template <typename Dtype>
void caffe_cpu_axpby(const int N, const Dtype alpha, const Dtype* X,const Dtype beta, Dtype* Y);
Y = X Y=X Y=X
template <typename Dtype>
void caffe_copy(const int N, const Dtype *X, Dtype *Y);
Y = α Y=\alpha Y=α
template <typename Dtype>
void caffe_set(const int N, const Dtype alpha, Dtype *X);
inline void caffe_memset(const size_t N, const int alpha, void* X) {
memset(X, alpha, N); // NOLINT(caffe/alt_fn)
}
X = X + α X = X+ \alpha X=X+α
template <typename Dtype>
void caffe_add_scalar(const int N, const Dtype alpha, Dtype *X);
X = α X X = \alpha X X=αX
template <typename Dtype>
void caffe_scal(const int N, const Dtype alpha, Dtype *X);
y i = a i 2 y_i = a_{i}^2 yi=ai2
template <typename Dtype>
void caffe_sqr(const int N, const Dtype* a, Dtype* y);
y i = a i y_i = \sqrt{a_{i}} yi=ai
template <typename Dtype>
void caffe_sqrt(const int N, const Dtype* a, Dtype* y);
y i = a i + b i y_i = a_i + b_i yi=ai+bi
template <typename Dtype>
void caffe_add(const int N, const Dtype* a, const Dtype* b, Dtype* y);
y i = a i − b i y_i = a_i - b_i yi=ai−bi
template <typename Dtype>
void caffe_sub(const int N, const Dtype* a, const Dtype* b, Dtype* y);
y i = a i × b i y_i = a_i \times b_i yi=ai×bi
template <typename Dtype>
void caffe_mul(const int N, const Dtype* a, const Dtype* b, Dtype* y);
y i = a i / b i y_i = a_i/b_i yi=ai/bi
template <typename Dtype>
void caffe_div(const int N, const Dtype* a, const Dtype* b, Dtype* y);
y i = a i b y_i = a_i^b yi=aib
template <typename Dtype>
void caffe_powx(const int n, const Dtype* a, const Dtype b, Dtype* y);
返回随机数
unsigned int caffe_rng_rand();
template <typename Dtype>
Dtype caffe_nextafter(const Dtype b);
产生[a,b]范围的均匀分布
template <typename Dtype>
void caffe_rng_uniform(const int n, const Dtype a, const Dtype b, Dtype* r);
产 生 服 从 ( ν , σ ) 的 高 斯 分 布 产生服从(\nu , \sigma)的高斯分布 产生服从(ν,σ)的高斯分布
template <typename Dtype>
void caffe_rng_gaussian(const int n, const Dtype mu, const Dtype sigma,Dtype* r);
产生概率为p的伯努利分布
template <typename Dtype>
void caffe_rng_bernoulli(const int n, const Dtype p, int* r);
产生概率为p的伯努利分布
template <typename Dtype>
void caffe_rng_bernoulli(const int n, const Dtype p, unsigned int* r);
y i = e a i y_i = e^{a_i} yi=eai
template <typename Dtype>
void caffe_exp(const int n, const Dtype* a, Dtype* y);
y i = l o g ( a i ) y_i = log(a_i) yi=log(ai)
template <typename Dtype>
void caffe_log(const int n, const Dtype* a, Dtype* y);
y i = ∣ a i ∣ y_i = |a_i| yi=∣ai∣
template <typename Dtype>
void caffe_abs(const int n, const Dtype* a, Dtype* y);
∑ i n x i y i \sum_i^n{x_{i}y_{i}} ∑inxiyi
template <typename Dtype>
Dtype caffe_cpu_dot(const int n, const Dtype* x, const Dtype* y);
∑ i n x i ∗ i n c x y i ∗ i n c y \sum_i^n{x_{i*incx}y_{i*incy}} ∑inxi∗incxyi∗incy
template <typename Dtype>
Dtype caffe_cpu_strided_dot(const int n, const Dtype* x, const int incx,const Dtype* y, const int incy);
∑ i n ∣ x i ∣ \sum_i^n{|x_i|} ∑in∣xi∣
// Returns the sum of the absolute values of the elements of vector x
template <typename Dtype>
Dtype caffe_cpu_asum(const int n, const Dtype* x);