matconvnet学习笔记(二)

1.matlab中@的使用

@是用于定义函数句柄的操作符,传递返回的是函数句柄

还有另外一种用法

变量名=@(输入参数列表)运算表达式,下面有两个例子

%1
fn=@sin(x);
fn(x)=sin(x);

%2
 fn=@(x,y) (x+y);
 fn(1,1)
 ans =
     2

%3这个更复杂一点了,是对一个函数 sygetBatch做后处理,然后得到一个新的数据接口的函数句柄fn,输入是imdb和images
function fn=WrappersygetBatch(batopts)
    fn=@(imdb,images) sygetBatch(imdb,images,batopts);
end

2.varargin,nargin

varargin用于函数输入参数不确定的情况,narin表示输入参数的个数(包含固定和不固定的输入),设定一个函数的输入如果是

f("name",val)的形式,那么这个输入其实是以结构体形式输入的。

3.和结构体相关的几个函数:

  • fiednames 返回结构体的成员名称
  • struct2cell以cell的形式取出结构体成员的值

4.matconvnet有关的笔记

  • vl_argparse(opts,args)用于更新结构体的opts,而输入参数args的输入格式为args={'par1',val1,'par2',val2};前提是输入参数的结构体的成员应该要存在于opts结构体中
  • cat用于concatenates:  cat(dim,A,B),比如将3个灰度图片合成一个彩色图:cat(3,r,g,b);
  • dagnnWrapper结构下的网络结构为

                                                              

其中比较重要的是layers,vars,params,layers记录的是每一个层的名称,vars记录的是变量名(各个层的输入输出),params存储参数,包括卷积核的参数等。可以通过getvaridx/getlayeridx/getparamsidx获取索引,通过renameVar命令等类似的命令更改层,变量或者params的名称。

  • unique函数返回的是唯一的值,C=unique(A),则返回的是A中的不重复的值,prod函数是针对矢量或者矩阵的乘法运算。fix取整。
  • 使用DOT+graphVIZ画流程图

这是一个很好的画流程图的软件,特别适合画网络结构,而且可编程,具体的语言就是DOT语言,如果需要安装的画,直接去graphVIZ的官网下载,按照官网上的指示下载就好了。

 

5.softmax+cross-entropy以及反向推导

softmax函数如下公式所示,这个函数一个很明显的好处是能够把网络最后一层的输出[a_{1},....a_{N}](N为输出的channel宽度,一般和种类同宽)映射到[0 1]的空间中,成为一个概率分布。

                                                                                p_{i}=\frac{e^{a_{i}}}{\sum_{N}^{k=1} e^{a_{k}}}

                                                                              \frac{\partial p_{i}}{\partial a_{m}}=\left\{\begin{matrix} p_{i}(1-p_{m}) \\\ -p_{i}\cdot p_{m} \end{matrix}\right.  (下面是i!=m的情况)

交叉熵可用来度量两个概率分布之间的距离,是K-L散度的变形:

                                                                       è¿éåå¾çæè¿°

交叉熵(N为类别数,y为标注,比如3分类中的标注[0 1 0]、[0 0 1]等):pi为第i维的概率输出,交叉熵就是衡量标注的概率分布与实际输出的概率分布的差异。k代表第k类。

                                                                              L=- \sum_{i=1}^{N}y_{i}log(p_{i})=-log(p_{k})

其实经过softmax+entropy计算之后,反传回去的梯度是在softmax计算输出的基础上,对目标对应的那一类的输出的一支减一,设目标属于a类,那么k=a的那一路输出,反传回去的梯度就是在原来的基础上减去1,其余分支不变:

                                                                                   \frac{\partial L}{\partial a_{k}}=\left\{\begin{matrix} p_{k}-1\\ p_{k} \end{matrix}\right. 

 

 

6.vl-nnloss里面那个ci的计算含义图解(这个主要是给自己看的)

                            

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

syvge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值