MKL学习——向量操作

前言

推荐两个比较好的教程:

BLAS (Basic Linear Algebra Subprograms)

LAPACK for Windows

命名规范

BLAS基本线性代数子程序的函数命令都有一定规范,便于记忆

<character> <name> <mod> ()

character

定义的是数据类型

s实数域,单精度
c复数域,单精度
d实数域,双精度
z复数域,双精度

也可结合起来,比如sc代表实数域和复数域的单精度类型,dz代表实数域和复数域的双精度类型。

name

针对BLAS level 1,也就是向量与向量间的操作的时候

dot向量点乘
rot向量旋转
swap向量交换

针对BLAS level 2和3的情况,也就是矩阵参数类型

ge一般矩阵
gb一般带状矩阵
sy对称矩阵
sp对称矩阵(压缩存储)
sb对称带状矩阵
he埃尔米特矩阵 Hermitian matrix
hp埃尔米特矩阵(压缩存储)
hb埃尔米特带状矩阵
tr三角矩阵
tp三角矩阵(压缩存储)
tb三角带状矩阵

mod

提供操作的额外信息,三种Level情况

针对Level 1

c共轭向量
u非共轭向量
gGivens 旋转结构
m修正 Givens 旋转
mg修正 Givens 旋转结构

针对Level 2

mv矩阵-向量乘积
sv求解具有一个未知向量的线性方程组
r矩阵的一阶更新
r2矩阵的二阶更新

针对Level 3

mm矩阵-矩阵乘积
sm求解具有多个未知向量的线性方程组
rk矩阵的k阶更新
r2k矩阵的2k阶更新

函数实例

ddot 双精度、实数域,向量-向量点乘
cdotc复数域,向量-向量点乘,共轭
scasum巨型向量元素和,单精度实数域输出,单精度复数域输入
cdotu向量-向量点乘,一般矩阵,单精度
sgemv矩阵-向量点乘,一般矩阵,单精度
ztrmm矩阵-矩阵乘法,三角矩阵,双精度复数域

C接口的调用方法

C接口相对于Fortran有一个优势就是,可以指定是行优先还是列优先。调用方法就是在正常的命令规范前面加个前缀cblas_。对于复数函数?dotc?dotu还需要加一个后缀_sub,通过指针返回复数结果,作为后一个参数添加进来。

使用CALBAS需要遵循一些规则

  • 输入参数需要使用const修饰
  • 非复数标量输入参数直接使用值传递
  • 复数标量参数使用void指针传递
  • 矩阵参数使用地址传递
  • BLAS类型参数使用合适的枚举类型代替
  • Level 2和3中有一个CLABS_LAYOUT类型的额外参数,作为第一个输入参数。这个参数指定二维数组是行优先CblasRowMajor还是列优先CblasColMajor

定义的枚举类型:

enum CBLAS_LAYOUT {
CblasRowMajor=101, /* row-major arrays */
CblasColMajor=102}; /* column-major arrays */
enum CBLAS_TRANSPOSE {
CblasNoTrans=111, /* trans='N' */
CblasTrans=112, /* trans='T' */
CblasConjTrans=113}; /* trans='C' */
enum CBLAS_UPLO {
CblasUpper=121, /* uplo ='U' */
CblasLower=122}; /* uplo ='L' */
enum CBLAS_DIAG {
CblasNonUnit=131, /* diag ='N' */
CblasUnit=132}; /* diag ='U' */
enum CBLAS_SIDE {
CblasLeft=141, /* side ='L' */
CblasRight=142}; /* side ='R' */

矩阵存储方案

三种存储方案:

  • 全部存储:比如将矩阵A存储到二维数组a中,矩阵元素Aij以列优先的方式存储到a[i+jlda]中,或者以行优先的形式存储到a[j+ilda]中。这里的lda就是数组的引导维度。
  • 压缩存储:用于存储对称阵,埃尔米特矩阵,三角矩阵。对于列优先的布局,上三角和下三角按照列存储到一个一维数组;或者按照行优先的布局,上三角和下三角按行存储到一个一维数组中。
  • 带状存储:带状矩阵被压缩存储到一个二维数组中。对于列优先布局,矩阵的列被存储到对应的数组列中,矩阵对角部分被存储到数组的特殊行中。对于行优先的布局,矩阵的行被存储到对应数组的行中,矩阵对角部分被存储到数组的指定行中。

行优先与列优先

Fortran中以列优先的方式存储二维数组;在C中,需要数组为行优先的格式,这是C的约定。讲道理的话,这句话应该是这样写,但是官方文档给出的英文是
The BLAS routines follow the Fortran convention of storing two-dimensional arrays using column-major layout. When calling BLAS routines from C, remember that they require arrays to be in column-major format, not the row-major format that is the convention for C. Unless otherwise specified, the psuedo-code examples for the BLAS routines illustrate matrices stored using column-major layout.
这里却写着是按照列存储的。但是在Intel® Math Kernel Library Getting Started Tutorial: Using the Intel® Math Kernel Library for Matrix Multiplication中的实例却是这样
这里写图片描述
代码是
这里写图片描述
这个for循环明显是将一行一行的赋值,说明连续存储的单元是行中相邻的元素。但是后面的英文又是
The one-dimensional arrays in the exercises store the matrices by placing the elements of each column in successive cells of the arrays.
意思是联系中的以为数组是将每行列的元素放入到数组单元中。代码明明是每行的元素放入到其中。这到底是按行存储还是按列存储?两篇参考博客介绍行列存储的区别: 行优先和列优先的问题,矩阵存储的两种方式——行优先与列优先。个人感觉,姑且认为是按行存储的吧,毕竟代码是这样写的,虽然与文字不一致。如果有同学有何见解,希望在评论区讨论讨论^_^

Level 1所有函数

所有函数概览

函数名缺失部分描述
cblas_?asums, d, sc, dz向量和
cblas_?axpys, d, c, z标量-向量乘积
cblas_?copys, d, c, z拷贝向量
cblas_?dots,d点乘
cblas_?sdotsd,d双精度点乘
cblas_?dotcc,z共轭点乘
cblas_?dotuc,z非共轭点乘
cblas_?nrm2s,d,sc,dz向量2范数
cblas_?rots,d,cs,zd绕点旋转
cblas_?rotgs,d,c,z生成点的Givens旋转
cblas_?rotms,d点的修正Givens旋转
cblas_?rotmgs,d生成点的修正Givens旋转
cblas_?scals, d, c, z, cs, zd向量-标量乘法
cblas_?swaps, d, c, z向量-向量交换
cblas_i?amaxs, d, c, z绝对值最大元素位置
cblas_i?amins, d, c, z绝对值最小元素位置
cblas_?cabs1s,d辅助函数,计算单精度或者双精度复数的绝对值

cblas_?asum

  • 作用:计算向量元素和
  • 定义函数
float cblas_sasum (const MKL_INT n, const float *x, const MKL_INT incx);
float cblas_scasum (const MKL_INT n, const void *x, const MKL_INT incx);
double cblas_dasum (const MKL_INT n, const double *x, const MKL_INT incx);
double cblas_dzasum (const MKL_INT n, const void *x, const MKL_INT incx);
  • 运算

    计算实数向量的元素和,或者计算复数向量的实部以及虚部的和

    res=|Re(x1)|+|Im(x1)|+|Re(x2|+|Im(x2)|++|Re(xn)|+|Im(xn)|

  • 输入参数

    n : 向量的元素个数

    x : 数组,大小至少是(1+(n1)abs(incx))

    incx : 指定索引向量x的增量

  • 返回值:向量所有元素的和

cblas_?axpy

  • 作用 : 计算向量-标量的积,然后加到结果上
  • 定义函数
void cblas_saxpy (const MKL_INT n, const float a, const float *x, const MKL_INT incx, float *y, const MKL_INT incy);
void cblas_daxpy (const MKL_INT n, const double a, const double *x, const MKL_INT incx, double *y, const MKL_INT incy);
void cblas_caxpy (const MKL_INT n, const void *a, const void *x, const MKL_INT incx, void *y, const MKL_INT incy);
void cblas_zaxpy (const MKL_INT n, const void *a, const void *x, const MKL_INT incx, void *y, const MKL_INT incy);
  • 运算

向量与向量之间的操作

y:=ax+y

  • 输入参数

    n : 指定向量x,y的元素个数

    a : 标量a

    x : 数组,大小至少是(1+(n1)abs(incx))

    incx : 指定索引向量x的增量

    y : 数组,大小至少是(1+(n1)abs(incy))

    incy : 指定索引向量y的增量

  • 返回值 : 最终更新得到的向量y

cblas_?copy

  • 作用 : 拷贝一个向量到另一个向量

  • 定义函数

    void cblas_scopy (const MKL_INT n, const float *x, const MKL_INT incx, float *y, const MKL_INT incy);
    void cblas_dcopy (const MKL_INT n, const double *x, const MKL_INT incx, double *y, const MKL_INT incy);
    void cblas_ccopy (const MKL_INT n, const void *x, const MKL_INT incx, void *y, const MKL_INT incy);
    void cblas_zcopy (const MKL_INT n, const void *x, const MKL_INT incx, void *y, const MKL_INT incy);
  • 运算

    拷贝向量 y=x

  • 输入参数

    n : 指定向量x,y的元素个数

    x : 数组,大小至少是(1+(n1)abs(incx))

    incx : 指定索引向量x的增量

    y : 数组,大小至少是(1+(n1)abs(incy))

    incy : 指定索引向量y的增量

  • 返回值 : 当n是正数的时候,向量x的拷贝被返回,否则参数不变。

cblas_?dot

  • 作用 : 计算向量-向量的点乘

  • 定义函数

    float cblas_sdot (const MKL_INT n, const float *x, const MKL_INT incx, const float *y, const MKL_INT incy);
    double cblas_ddot (const MKL_INT n, const double *x, const MKL_INT incx, const double *y, const MKL_INT incy);
  • 运算 :

    res=i=1nxiyi

  • 输入参数

    n,x,incx,y,incy分别代表元素个数,数组x,数组x的索引增量,数组y,数组y的索引增量

  • 返回值 : 返回两个向量的点乘;如果n<0,返回0

cblas_?sdot

  • 作用 : 计算双精度向量-向量的点乘

  • 定义函数

    float cblas_sdsdot (const MKL_INT n, const float sb, const float *sx, const MKL_INT incx, const float *sy, const MKL_INT incy);
    double cblas_dsdot (const MKL_INT n, const float *sx, const MKL_INT incx, const float *sy, const MKL_INT incy);
  • 运算

    ?sdot计算的是两个双精度向量的内积(点积),中间结果的累积是双精度的,但是sdsdot返回的结果是单精度的,使用dsdot可以输出双精度的结果。其中sdsdot为点积结果加一个标量值sb

  • 输入参数

    n : 输入向量xy的维度

    sb : 内积的单精度缩放值(仅针对sdsdot)

    sx,sy : 数组,包含单精度输入向量

    incx,incy : 两个数组的索引增量

  • 返回值 : 当n为正的时候,返回两个数组的点乘(sdsdot结果加一个标量sb);若n0,对于sdsdot返回sb,对于dsdot返回0

cblas_?dotc

  • 作用 : 计算一个共轭向量与另一个向量的点积

  • 定义函数

    void cblas_cdotc_sub (const MKL_INT n, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *dotc);
    void cblas_zdotc_sub (const MKL_INT n, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *dotc);
  • 运算

    res=i=1nconjg(xi)yi

  • 输入参数

    n,x,incx,y,incy分别代表元素个数,数组x及其索引增量,数组y及其增量

  • 输出 : 如果n>0,输出共轭向量x与非共轭向量y的点乘,否则返回0

cblas_?dotu

  • 作用 : 计算复数域的向量-向量的点积

  • 定义函数

    void cblas_cdotu_sub (const MKL_INT n, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *dotu);
    void cblas_zdotu_sub (const MKL_INT n, const void *x, const MKL_INT incx, const void *y, const MKL_INT incy, void *dotu);
  • 运算

    res=i=1nxiyi

    其中xiyi分别是复数向量xy的元素

  • 输入参数 : 同上

  • 输出参数 : 如果n>0,返回点积,否则返回0

cblas_?nrm2

  • 作用 : 计算一个向量的欧几里得范数(Euclidean norm)

  • 定义函数

    float cblas_snrm2 (const MKL_INT n, const float *x, const MKL_INT incx);
    double cblas_dnrm2 (const MKL_INT n, const double *x, const MKL_INT incx);
    float cblas_scnrm2 (const MKL_INT n, const void *x, const MKL_INT incx);
    double cblas_dznrm2 (const MKL_INT n, const void *x, const MKL_INT incx);
  • 运算

    res=||x||

  • 输入参数 : 元素个数,数组,索引增量

  • 返回值 : 向量x的欧几里得范数

cblas_?rot

  • 作用 : 平面上绕点旋转

  • 定义函数

    void cblas_srot (const MKL_INT n, float *x, const MKL_INT incx, float *y, const MKL_INT incy, const float c, const float s);
    void cblas_drot (const MKL_INT n, double *x, const MKL_INT incx, double *y, const MKL_INT incy, const double c, const double s);
    void cblas_csrot (const MKL_INT n, void *x, const MKL_INT incx, void *y, const MKL_INT incy, const float c, const float s);
    void cblas_zdrot (const MKL_INT n, void *x, const MKL_INT incx, void *y, const MKL_INT incy, const double c, const double s);
  • 运算

    通俗写法

    [xi,yi]=[xi,yi][cssc]

    官方写法

    xi=cxi+syiyi=cyisxi

  • 输入参数 : 元素个数,两个向量,对应的索引增量,c,s表示所绕点的坐标标量

  • 输出参数 : x的每个元素被cx+sy代替,y的每个元素被cysx代替

cblas_?rotg

  • 作用 : 计算Givens旋转参数

  • 定义函数

    void cblas_srotg (float *a, float *b, float *c, float *s);
    void cblas_drotg (double *a, double *b, double *c, double *s);
    void cblas_crotg (void *a, const void *b, float *c, void *s);
    void cblas_zrotg (void *a, const void *b, double *c, void *s);
  • 运算

    给定一个点的笛卡尔(Cartesian)坐标(a,b),返回参数c,s,r,z对应Givens旋转,c,s对应的是酉阵(unitary matrix),类似于

    [cssc][ab]=[r0]

    参数z这样定义 : 如果|a|>|b|,那么z=s,否则如果c0,那么z=1c,否则z=1

  • 输入参数 : a,b分别提供点p的横x坐标和纵y坐标

  • 输出参数 : Givens的四个参数

cblas_?rotm

  • 作用 : 修正绕平面是一点的Givens旋转

  • 定义函数

    void cblas_srotm (const MKL_INT n, float *x, const MKL_INT incx, float *y, const MKL_INT incy, const float *param);
    void cblas_drotm (const MKL_INT n, double *x, const MKL_INT incx, double *y, const MKL_INT incy, const double *param);
  • 运算

    给定两个向量x,y,这些向量的每个元素都会被替代为

    [xiyi]=H[xiyi]

    其中i=1n,H是修正Givens旋转矩阵,值存储在parm[1]parm[4]

  • 输入参数

    n,x,incx,y,incy,分别表示元素个数,两个向量,对应增量索引

    param : 包含五个参数,param[0]代表切换标志,param[14]均包含h11,h12,h21,h22,分别对应数组H的成分,依据标识符,可以得到如下数组H

    flag=1.0:H=[h11h21h12h22]flag=0.0:H=[1.0h21h121.0]flag=1.0:H=[h111.01.0h22]flag=2.0:H=[1.00.00.01.0]

    后三种情况,矩阵H中的0.1,1.0,0.0可以由标志指定,无需在向量中写出来

  • 输出 : x的每一个向量被h11x[i]+h12y[i]替换,y的每一个向量被h21x[i]+h22y[i]替换

cblas_?rotmg

  • 作用 : 计算修正Givens旋转的参数

  • 定义函数

    void cblas_srotmg (float *d1, float *d2, float *x1, const float y1, float *param);
    void cblas_drotmg (double *d1, double *d2, double *x1, const double y1, double *param);
  • 运算

    给定输入向量的笛卡尔坐标(x1,y1),计算将结果向量的y置零时候,计算得到的Givens旋转矩阵H

    [x10]=H[x1d1y1d2]

  • 输入参数

    d1代表向量的x轴缩放因子,d2代表向量的y轴缩放因子,x1,y1是输入向量的横纵坐标

  • 输出

    d1是更新矩阵的第一对角元

    d2是更新矩阵的第二对角元

    x1是缩放之前旋转向量的x坐标

    param同上cblas_?rotmg的输入parma一样

cblas_?scal

  • 作用 : 计算向量和标量的乘积

  • 定义函数

    void cblas_sscal (const MKL_INT n, const float a, float *x, const MKL_INT incx);
    void cblas_dscal (const MKL_INT n, const double a, double *x, const MKL_INT incx);
    void cblas_cscal (const MKL_INT n, const void *a, void *x, const MKL_INT incx);
    void cblas_zscal (const MKL_INT n, const void *a, void *x, const MKL_INT incx);
    void cblas_csscal (const MKL_INT n, const float a, void *x, const MKL_INT incx);
    void cblas_zdscal (const MKL_INT n, const double a, void *x, const MKL_INT incx);
  • 运算

    x=ax

  • 输入参数

    n向量的元素个数,a标量,x数组,incx向量x的索引增量

  • 输出 : 更新后的向量x

cblas_?swap

  • 作用 : 交换向量值

  • 定义函数

    void cblas_sswap (const MKL_INT n, float *x, const MKL_INT incx, float *y, const MKL_INT incy);
    void cblas_dswap (const MKL_INT n, double *x, const MKL_INT incx, double *y, const MKL_INT incy);
    void cblas_cswap (const MKL_INT n, void *x, const MKL_INT incx, void *y, const MKL_INT incy);
    void cblas_zswap (const MKL_INT n, void *x, const MKL_INT incx, void *y, const MKL_INT incy);
  • 计算:交换向量xy,互相代替元素值

  • 输入参数 : 正常的五个输入,元素个数,数组,增量索引

  • 输出 : 交换后的向量x,y

cblas_i?amax

  • 作用 : 找到绝对值最大的元素的索引

  • 定义函数

    CBLAS_INDEX cblas_isamax (const MKL_INT n, const float *x, const MKL_INT incx);
    CBLAS_INDEX cblas_idamax (const MKL_INT n, const double *x, const MKL_INT incx);
    CBLAS_INDEX cblas_icamax (const MKL_INT n, const void *x, const MKL_INT incx);    
    CBLAS_INDEX cblas_izamax (const MKL_INT n, const void *x, const MKL_INT incx);
  • 计算 : 给定向量x,函数i?amax返回实数域中绝对值最大的向量元素x[i]的位置,或者返回复数域|Re(x[i])|+|Im(x[i])|和的最大值

    如果n非正,则返回

    如果向量中有好几个位置的值等于最大元素,第一个位置将被返回

  • 输入参数 : n,x,incx分别代表向量元素个数,数组,索引增量

  • 返回值 : 返回最大值元素的位置,比如x[index1]具有最大的绝对值

cblas_i?amin

  • 作用 : 返回最小值的位置

  • 定义函数

    CBLAS_INDEX cblas_isamin (const MKL_INT n, const float *x, const MKL_INT incx);
    CBLAS_INDEX cblas_idamin (const MKL_INT n, const double *x, const MKL_INT incx);
    CBLAS_INDEX cblas_icamin (const MKL_INT n, const void *x, const MKL_INT incx);
    CBLAS_INDEX cblas_izamin (const MKL_INT n, const void *x, const MKL_INT incx);
  • 计算 : i?amin返回的是向量的最小绝对值的位置。与i?amax类似

  • 输入参数: 同i?amax

  • 返回值: 绝对值最小元素位置的索引,比如x[index1]具有最小的绝对值

cblas_?cabs1

  • 作用: 计算复数的绝对值,是一个辅助函数,用于辅助其它函数的实现

  • 定义函数

    float cblas_scabs1 (const void *z);
    double cblas_dcabs1 (const void *z);
  • 计算

    res=|Re(z)|+|Im(z)|

  • 输入: 标量z

  • 返回值: 复数z的绝对值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【caffe-Windows】识别率批量输出——matlab实现

前言 今天看到群里有人问”用matlab输出测试集的精度“&#xff0c;瞎试了一下&#xff0c;好像还成功了。主要还是依据前面所有在matlab中操作caffe的博客。 这里说一下&#xff1a;classification.m是适用单张图片的精度&#xff0c;类似于classification.exe的功能&#x…

MKL学习——矩阵向量操作

前言 前面介绍的BLAS Level 1是向量-向量的操作&#xff0c;而这里的BLAS Level 2主要还是对矩阵-向量之间的操作。命名规则与前面的一样&#xff0c;主要记住定义的是数据类型 s实数域&#xff0c;单精度c复数域&#xff0c;单精度d实数域&#xff0c;双精度z复数域&#xf…

MKL学习——矩阵矩阵操作

前言 前面介绍了BLAS Level 1中向量-向量操作&#xff0c;以及BLAS Level 2中矩阵-向量的操作&#xff0c;就剩下这一篇的BLAS Level 3中的矩阵-矩阵的操作了。对稀疏矩阵的操作以后等要用再看看。对基本的矩阵和向量运算的函数有所了解以后&#xff0c;就进行常用参数分析&am…

MKL学习——线性代数概念相关

前言 回顾一下BLAS Level 1 2 3中的运算都有什么类型 BLAS Level 1 在BLAS Level 1中&#xff0c;进行的是向量-向量的操作。其中相关概念有 向量类型: 实数域&#xff0c;复数域&#xff0c;共轭运算操作: 元素求和&#xff0c;向量相加&#xff0c;向量拷贝&#xff0c;点乘…

MKL学习——基本操作C++实现

前言 前面介绍了各种向量-向量&#xff0c;矩阵-向量&#xff0c;矩阵-矩阵的函数简介。根据自身目前状况&#xff0c;主要使用实数域的操作&#xff0c;也就是说关注单精度float类型的s和双精度double类型的d。还有就是用的基本都是全矩阵&#xff0c;没有经过压缩&#xff0…

相机矩阵(Camera Matrix)

前言 最近翻阅关于从2D视频或者图片中重构3D姿态的文章及其源码&#xff0c;发现都有关于摄像机参数的求解&#xff0c;查找了相关资料&#xff0c;做一下笔记。 国际惯例&#xff0c;来一波参考网址 透视变换、透镜畸变及校正模型、相机校正(Camera Calibration)、Matlab相…

损失函数梯度对比-均方差和交叉熵

前言 我们都知道在机器学习中&#xff0c;希望算法或者网络收敛更快&#xff0c;有些是对数据预处理&#xff0c;尤其是Batch Normalization&#xff0c;有些是采用不同的激活函数&#xff0c;尤其是Relu激活函数取得了巨大的成功&#xff0c;还有一种加速收敛方法是更换损失函…

如何选择深度学习优化器

前言 转载地址&#xff1a;如何选择深度学习优化器 作者&#xff1a;不会停的蜗牛 CSDN AI专栏作家 在很多机器学习和深度学习的应用中&#xff0c;我们发现用的最多的优化器是 Adam&#xff0c;为什么呢&#xff1f; 下面是 TensorFlow 中的优化器&#xff0c; https://w…

【caffe-Windows】以mnist为例的hdf5单标签处理——matlab实现

前言 主要是想尝试看一下多标签的caffe是如何进行输入输出的&#xff0c;但是目前还未找到基于原始caffe做多标签输入的代码&#xff0c;大部分都是基于源码做了一部分修改实现多标签分类&#xff0c;caffe官网倒是有一个多标签的Python程序&#xff0c;这个我慢慢研究研究&am…

【caffe-Windows】基于Python多标签方法——VOC2012数据集

前言 按照上一篇博客所遗留的话题&#xff1a;多标签分类&#xff0c;进行初步探索&#xff0c;此篇博客针对caffe官网的多分类进行配置&#xff0c;只不过是Python接口的&#xff0c;不过官网在开头说明可以使用HDF5或者LMDB进行操作&#xff0c;只不过Python更加方便罢了 国…

【theano-windows】学习笔记一——theano中的变量

前言 因为目前需要搭建一些关于RBM或者其他之类的模型&#xff0c;感觉不太会折腾caffe&#xff0c;然而我发现了几个有趣网址&#xff0c;使用theano实现了各种各样的模型&#xff0c;所以&#xff0c;尝试学一下theano。主要以官方教程为主&#xff0c;所以博客会以译文的方…

【theano-windows】学习笔记二——theano中的函数和共享参数

前言 上一篇博客中学到了theano中的变量类型&#xff0c;也就是dscalar、dvector之类的, 然后还有一个theano.function和eval函数, 将我们所定义的操作转换成theano可执行的函数&#xff0c;类似于def, 还有就是简单的线性代数运算操作。 在神经网络(NN)中, 我们声明了权重、…

【theano-windows】学习笔记三——theano中的导数

前言 就一个NN而言&#xff0c;包含梯度、偏置、参数更新&#xff0c;而前面第一篇博客学习了theano中符号变量的定义, 第二篇博客学习了变量的随机初始化, 变量之间的互相操作(类似于sigmoid(w∗xb)), 但是参数更新还应涉及到损失函数的偏导计算&#xff0c;这一章节就是看看…

【theano-windows】学习笔记四——theano中的条件语句

前言 按照官网教程&#xff0c;学习条件语句Switch和ifelse的使用 参考地址: conditions 性能对比 ifElse是将布尔变量和两个变量当做输入 Switch是将张量和两个变量当做输入. 因为Switch是元素级操作&#xff0c;所以比ifElse更具一般性 Switch需要对所有输出变量进行评…

【theano-windows】学习笔记五——theano中张量部分函数

前言 至此感觉应该可以写出一个logistic回归程序了&#xff0c;但是为了达到对theano中张量的更灵活的使用, 还是先看一下thenao.tensor对变量都提供了哪些操作&#xff0c;最全的文档戳这里或者这里, 这里就稍微摘取一点自我感觉以后可能用得多的函数 基本张量函数 创建张量…

【theano-windows】学习笔记六——theano中的循环函数scan

前言 Scan是Theano中最基础的循环函数, 官方教程主要是通过大量的例子来说明用法. 不过在学习的时候我比较习惯先看看用途, 然后是参数说明, 最后再是研究实例. 国际惯例, 参考网址 官网关于Scan的11个例子 官网更全面的介绍 简介 用途 递归的一般形式, 可以被用于循环s…

多标签分类、多任务分类、多输出回归概念

前言 虽然不是搞分类的&#xff0c;但是还是看看多标签和多分类的区别。为了避免自己的错误理解, 当然是选择原谅他啊…….找正规文档看哇. 以下翻译分别来自scikit-learn.org和 维基 喂鸡百科 国际惯例&#xff0c;贴上来源: Multiclass and multilabel algorithms Multi-…

【theano-windows】学习笔记七——logistic回归

前言 前面只是学了最基本的theano操作&#xff0c;但是theano中还有很多其他的东西&#xff0c;比如图结构&#xff0c;自定义函数等&#xff0c;这些暂时没有用到就先不看了&#xff0c;后续学啥用啥&#xff0c;没必要一口气吃个胖子&#xff0c;免得消化不良还把前面吃的东…

【theano-windows】学习笔记八——预备知识

前言 按照上一个博客所说的&#xff0c;直接按照深度学习0.1文档进行学习&#xff0c;当然在此之前我们需要了解这一系列教程所需要的数据集&#xff0c;以及一些概念性的东西 国际惯例&#xff0c;参考博客网址&#xff1a; 深度学习0.1文档 深度学习0.1文档-中文翻译 基…

【theano-windows】学习笔记九——softmax手写数字分类

前言 上一篇博客折腾了数据集的预备知识, 接下来按照官方的Deep learning 0.1 documentation一步步走, 先折腾softmax, 关于softmax和logistic回归分类的联系, 我在之前写过一个小博客 国际惯例, 参考博客走一波: Classifying MNIST digits using Logistic Regression soft…