关键点:

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. Nodejs在Ubuntu的部署和配置 samba

    在Ubuntu上安装samba 在10.04上安装samba时,先把samba卸载,不然会影响后面的安装. 0.卸载samba sudo apt-get remove samba-common sud ...

  2. asp.net core mvc 在中间件中使用依赖注入问题:System.InvalidOperationException: Cannot resolve scoped service 'IXXXService' from root provider.

    今天在弄JWT的时候需要用到用户验证使用一个自己写好的验证,但在出现了:System.InvalidOperationException: Cannot resolve scoped service ...

  3. Oracle树查询及相关函数

    Oracle树查询的最重要的就是select...start with... connect by ...prior 语法了.依托于该语法,我们可以将一个表形结构的中以树的顺序列出来.在下面列述了Or ...

  4. 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'groups)VALUES('1','hh','hh@163.com','Boss')' at line 1

    mysql8.0版本 在已存在的表里插入一条数据 insert INTO api_user(id,username,email,groups)VALUES('1','hh','hh@163.com', ...

  5. (Review cs231n) Spatial Localization and Detection(classification and localization)

     重在图像的定位和检测的内容. 一张图片中只有一种给定类别标签的对象,定位则是图像中有对象框:再这些类中,每一个训练目标都有一个类和许多的图像内部对应类的位置选框. 猜想的仅是类标签,不如说它们是位置 ...

  6. ogg同步DDL时,源和目标端表空间名称不同的解决思路

    在OGG同步过程中,经常会碰上有创建表或表空间的同步,往往因为源和目标的平台不同,如aix->linux or linux->windows,这两个平台的表空间也经常不同,在目标端执行DD ...

  7. ltp-ddt git

    ltp-ddt目录下有一个文件夹 confrVOaeL confvp5WrA 这个文件夹是由./configure --host=arm-linux-gnueabihf命令生成的. 每次configu ...

  8. Java 新建excle文件并填充模版内容

    Java 新建excle文件并填充模版内容 一.JAR import java.io.BufferedReader; import java.io.File; import java.io.FileI ...

  9. element-ui 2.4.3 如何实现对form部分字段验证的解决方法?

    这是实际项目中的一个例子: 新增人员信息功能: 必填:姓名 .电话(验证电话格式): 非必填:备注.微信.邮箱(验证邮箱格式) 必填验证: 邮箱格式验证: 今天偶然看到 element-ui 2.4. ...

  10. 原创《开源一个用 vue 写的树层级组件 vue-ztree》

    最近由于后台管理项目的需要,页面需要制作一个无限树的需求,我第一感就想到了插件 ztree,不过我觉得它太大了,还是自己动手丰衣足食吧. ztree 的 demo 地址:http://www.tree ...