关键点:

1、关于filter正交

将一层中的一个$k \times k \times c$的卷积核展开为$k * k * c$的向量,表示为$f$。一层中有$J_{\ell}$个卷积核,$\boldsymbol{W}_{\ell}$为一个矩阵,矩阵的行 为卷积核展开的向量,行数为卷积核数$J_{\ell}$。

首先对于矩阵$\boldsymbol{W}_{\ell}$做标准化。

\begin{equation}
\hat{\boldsymbol{W}}_{\ell}=\boldsymbol{W}_{\ell} /\left\|\boldsymbol{W}_{\ell}\right\|
\end{equation}

一层之中卷积核间的正交性用$O_{\ell}^{f}$表示。

\begin{equation}
\boldsymbol{P}_{\ell}=\left|\hat{\boldsymbol{W}}_{\ell} \times \hat{\boldsymbol{W}}_{\ell}^{T}-I\right|
\end{equation}

\begin{equation}
O_{\ell}^{f}=\frac{\sum P_{\ell}[f]}{J_{\ell}}
\end{equation}

$\boldsymbol{P}_{\ell}$是大小为$J_{\ell} \times J_{\ell}$的矩阵,$P[i]$表示矩阵$\boldsymbol{P}_{\ell}$的$i^{t h}$行。

作者认为如果$i^{t h}$行对应的卷积核与其他的卷积核正交,那么该行的sum值应该是最小的。然后按照这个标准在层内对filter进行排序。

因为文中,作者先去构建了一个两层的网络,针对于CIFAR-10数据集,drop filter之后发现后面的层drop filter对于最后的准确度的影响相对来说要更小,所以作者就剪去更深层的filter。

2、重新初始化权重

作者在剪去不重要的权重之后,继承权重进行训练,进行一定epoch之后,将剪去的卷积核再拿来重新初始化后添加进网络,但是问题的关键在于如何进行初始化的,如果随便的进行初始化会不会有效果,作者是将新添加进来的卷积核和未添加卷积核之前的网络卷积核正交的方式来初始化的权重数据。

分析:

在github上找到了别人实现的工程:https://github.com/siahuat0727/RePr

还有相对应的复现过程记录博客:https://siahuat0727.github.io/2019/03/17/repr/

复现者有些思考方向是值得借鉴的:

1、复现者开始复现后结果并没有论文中这么好。然后开始对比自己的loss曲线和论文中的loss曲线之间的差别,发现自己复现的einitialize 之后train精度特别明显的回升,而论文中的曲线回升明显并且精度值比较高,所以作者就怀疑是不是pytorch中数据增强的问题,data augmentation,torchvision.transforms.RandomCrop

2、复现者不使用data augmentation,发现效果还是不好,这时候复现者没有就此放弃,而是做了其他的尝试,调低了学习率,发现论文中的方法的却是有效的。

3、这时候作者重新恢复使用data augmentation,使用现在的学习率,但是没有使用论文中的方法,发现data augmentation的效果更好。

总而言之,复现还存在问题。

RePr: Improved Training of Convolutional Filters的更多相关文章

  1. 论文阅读笔记六十二:RePr: Improved Training of Convolutional Filters(CVPR2019)

    论文原址:https://arxiv.org/abs/1811.07275 摘要 一个训练好的网络模型由于其模型捕捉的特征中存在大量的重叠,可以在不过多的降低其性能的条件下进行压缩剪枝.一些skip/ ...

  2. Deep Learning 19_深度学习UFLDL教程:Convolutional Neural Network_Exercise(斯坦福大学深度学习教程)

    理论知识:Optimization: Stochastic Gradient Descent和Convolutional Neural Network CNN卷积神经网络推导和实现.Deep lear ...

  3. [转] Understanding Convolutional Neural Networks for NLP

    http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/ 讲CNN以及其在NLP的应用,非常 ...

  4. (转)ResNet, AlexNet, VGG, Inception: Understanding various architectures of Convolutional Networks

    ResNet, AlexNet, VGG, Inception: Understanding various architectures of Convolutional Networks by KO ...

  5. (zhuan) Building Convolutional Neural Networks with Tensorflow

    Ahmet Taspinar Home About Contact Building Convolutional Neural Networks with Tensorflow Posted on a ...

  6. (zhuan) Using convolutional neural nets to detect facial keypoints tutorial

    Using convolutional neural nets to detect facial keypoints tutorial   this blog from: http://danieln ...

  7. [转]An Intuitive Explanation of Convolutional Neural Networks

    An Intuitive Explanation of Convolutional Neural Networks https://ujjwalkarn.me/2016/08/11/intuitive ...

  8. Understanding Convolutional Neural Networks for NLP

    When we hear about Convolutional Neural Network (CNNs), we typically think of Computer Vision. CNNs ...

  9. 卷积神经网络LeNet Convolutional Neural Networks (LeNet)

    Note This section assumes the reader has already read through Classifying MNIST digits using Logisti ...

随机推荐

  1. 数据迁移时 提示 No changes detected

    1.删除数据库中django_migrations 中对应的信息 2.删除app下的migrations对应的文件 3.重新执行就可成功 如不成功 ,直接删库 ,重新迁移

  2. 【论文速读】Chuhui Xue_ECCV2018_Accurate Scene Text Detection through Border Semantics Awareness and Bootstrapping

    Chuhui Xue_ECCV2018_Accurate Scene Text Detection through Border Semantics Awareness and Bootstrappi ...

  3. stm32 堆溢出

    STM32 堆溢出 遇到的问题 最近在给旧项目添加了段代码,程序经常到某个状态就突然崩溃了,也不一定是在运行新代码的时候崩溃.检查了几遍代码,数组越界访问,除数为0,内存泄露等常见的问题都不存在. 原 ...

  4. Excel坐标自动在AutoCad绘图_2

    众所周知,Excel对数据处理的功能非常强大,它可以进行数据处理.统计分析已经辅助决策的操作,该软件已经渗透到各个领域.作为一个测绘人,GISer, 也经常利用excel完成一些测量表格的自动化计算, ...

  5. Java基础语法-Lambda表达式

    1.Lambda表达式主要用于简写接口的操作等出现匿名内部类的地方,如下:我这里先定义一个Swim接口,以及它所定义的swim()方法 interface Swim{ void swim(); } 2 ...

  6. 解决SVN提交和更新代码冲突?

    解决冲突有三种选择: 1.放弃自己的更新,使用svn revert(回滚),然后提交.在这种方式下不需要使用svn resolved(解决) 2.放弃自己的更新,使用别人的更新.使用最新获取的版本覆盖 ...

  7. c++的一些入门

    cout:对象名  <<:是一种插入运算符   endl:换行  :列如:count <<"Hello!"<<endl;  //把hello送到 ...

  8. C# 创建数据库和表

    using (SqlCommand command2 = new SqlCommand("CREATE TABLE bases(id int IDENTITY(1, 1) PRIMARY K ...

  9. Pandas: 使用str.replace() 进行文本清洗

    str.replace()可以一次处理一整个Series.str.replace()的正式形式为 Series.str.replace(pat, repl) ,其中pat为想要寻找的模式,一般为正则表 ...

  10. 根据文字动态计算Label高度或宽度

    //根据已知的label宽度计算文字高度 CGRect rect = [reson boundingRectWithSize:CGSizeMake(label_W, 0) options:NSStri ...