精华内容
下载资源
问答
  • CRelu

    2019-10-08 17:53:04
    于是猜测浅层卷积核是正负成对出现的,这就意味着通过这一对卷积核产生的feature map也是正负成对出现的,其实完全可以通过使用其中一个卷积核的featureMap取负得到对称的featureMap,于是作者构造了一个CRelu即...

    一句话说明:作者通过对Alexnet浅层卷积核参数的观察,发现了很多高度负相关的卷积核,于是猜测浅层卷积核是正负成对出现的,这就意味着通过这一对卷积核产生的feature map也是正负成对出现的,其实完全可以通过使用其中一个卷积核的featureMap取负得到对称的featureMap,于是作者构造了一个CRelu即Concatenated Relu来完成这个功能。具体实现:将featureMap取反过后再concat在一起,再通过一个relu。

     

    转载于:https://www.cnblogs.com/anti-tao/p/9846252.html

    展开全文
  • relu和crelu使用

    千次阅读 2017-08-23 17:53:18
    之前不了解crelu,随便将网络中的relu换成crelu, 然后调了半天的bug。 —–自己写bug,自己调bug, 死循环ing ——先看写一段代码:import tensorflow as tf import collections slim = tf.contrib.slimweights_...

    之前不了解crelu,随便将网络中的relu换成crelu, 然后调了半天的bug。
    —–自己写bug,自己调bug, 死循环ing ——

    先看写一段代码:

    import tensorflow as tf
    import collections
    slim = tf.contrib.slim
    
    weights_initializer = tf.contrib.layers.xavier_initializer(uniform=True)
    biases_initializer = tf.random_uniform_initializer(-0.01, 0.01)
    activation_fn = tf.nn.relu
    is_bn_training = True
    reuse = False
    
    with slim.arg_scope([slim.conv2d], padding='VALID', stride=[2, 1], weights_initializer=weights_initializer,
                                    biases_initializer=biases_initializer, activation_fn=None, reuse=reuse):
        with slim.arg_scope([slim.batch_norm], decay=0.9997,
                                center=True, scale=True, epsilon=1e-5, activation_fn=activation_fn,
                                is_training=is_bn_training, reuse=reuse):
    
            # (batchsize, height, weight, channels)
            inputs = tf.placeholder(tf.float32, (None, None, 1, 1))
            trn_net = tf.pad(inputs, [[0, 0], [32, 32], [0, 0], [0, 0]])
            #(input, 输出的feautres-map的数量, kernel, stride=[2,1])
            trn_net = slim.conv2d(trn_net, 16, [64, 1], scope='conv1')
            trn_net = slim.batch_norm(trn_net, scope='bnorm1')
            trn_net = slim.max_pool2d(trn_net, [8, 1], scope='pool1', stride=[8, 1])
    
            trn_net = tf.pad(trn_net, [[0, 0], [16, 16], [0, 0], [0, 0]])
            trn_net = slim.conv2d(trn_net, 32, [32, 1], scope='conv2')
            trn_net = slim.batch_norm(trn_net, scope='bnorm2')
            for var in tf.global_variables():
                print(var)

    当激活函数是 relu 时打印的输出:

    <tf.Variable 'conv1/weights:0' shape=(64, 1, 1, 16) dtype=float32_ref>
    <tf.Variable 'conv1/biases:0' shape=(16,) dtype=float32_ref>
    <tf.Variable 'bnorm1/beta:0' shape=(16,) dtype=float32_ref>
    <tf.Variable 'bnorm1/gamma:0' shape=(16,) dtype=float32_ref>
    <tf.Variable 'bnorm1/moving_mean:0' shape=(16,) dtype=float32_ref>
    <tf.Variable 'bnorm1/moving_variance:0' shape=(16,) dtype=float32_ref>
    <tf.Variable 'conv2/weights:0' shape=(32, 1, 16, 32) dtype=float32_ref>  #shape (kernel_height,  kernel_weight,  pre-feature-map的数量,cur-feature-map的数量)
    <tf.Variable 'conv2/biases:0' shape=(32,) dtype=float32_ref>
    <tf.Variable 'bnorm2/beta:0' shape=(32,) dtype=float32_ref>
    <tf.Variable 'bnorm2/gamma:0' shape=(32,) dtype=float32_ref>
    <tf.Variable 'bnorm2/moving_mean:0' shape=(32,) dtype=float32_ref>
    <tf.Variable 'bnorm2/moving_variance:0' shape=(32,) dtype=float32_ref>

    当激活函数修改为crelu时打印的输出:

    <tf.Variable 'conv1/weights:0' shape=(64, 1, 1, 16) dtype=float32_ref>
    <tf.Variable 'conv1/biases:0' shape=(16,) dtype=float32_ref>
    <tf.Variable 'bnorm1/beta:0' shape=(16,) dtype=float32_ref>
    <tf.Variable 'bnorm1/gamma:0' shape=(16,) dtype=float32_ref>
    <tf.Variable 'bnorm1/moving_mean:0' shape=(16,) dtype=float32_ref>
    <tf.Variable 'bnorm1/moving_variance:0' shape=(16,) dtype=float32_ref>
    <tf.Variable 'conv2/weights:0' shape=(32, 1, 32, 32) dtype=float32_ref>  ##shape (kernel_height,  kernel_weight,  pre-feature-map的数量,cur-feature-map的数量)
    <tf.Variable 'conv2/biases:0' shape=(32,) dtype=float32_ref>
    <tf.Variable 'bnorm2/beta:0' shape=(32,) dtype=float32_ref>
    <tf.Variable 'bnorm2/gamma:0' shape=(32,) dtype=float32_ref>
    <tf.Variable 'bnorm2/moving_mean:0' shape=(32,) dtype=float32_ref>
    <tf.Variable 'bnorm2/moving_variance:0' shape=(32,) dtype=float32_ref>

    两个参数量是不一致的,特别是在finetune网络的时候,一定要注意使用,否则一直会报错。
    使用CReLU时,要有意识的将滤波器数量减半,否则会将输入的feature-map的数量扩展为两倍, 网络参数将会增加。

    下面具体看一下 crelu [1]的原理:
    论文通过用AlexNet在Cifar数据集上进行试验,通过观测每一层中滤波器的分布,低层的滤波器分布存在对称的现象, 所以考虑在低层的网络中采用 CRelu效果会提升很多。

    CRelu的输入是BN之后的16张feature-map, CRelu的输入是 featrues = [features, -features], 所以输入的feature-map的数量扩展成了一倍,所以这里第一层BN之后的feature-map 的数目由 16 变成了 32, 所以在 第二层卷积的时候权重变成了 (32, 1, 32, 32).

    Shang W, Sohn K, Almeida D, et al. Understanding and improving convolutional neural networks via concatenated rectified linear units[C]//International Conference on Machine Learning. 2016: 2217-2225.

    展开全文
  • CReLU激活函数

    万次阅读 多人点赞 2017-09-03 00:04:56
    \(CReLU(x) = [ReLU(x),ReLU(-x)]\) 输出维度会自动加倍。 比如 \(-3 \rightarrow [0,3]\) \(\quad3 \rightarrow [3,0]\) 在网络中的实现也很简单,甚至不用修改代码(通过scale层取反再经过一次ReLU) ...

    一种改进ReLU激活函数的文章,来自ICML2016.

    文章链接: 《Understanding and Improving Convolutional Neural Networks via Concatenated Rectified Linear Units》

    1. 背景介绍

    整个文章的出发点来自于下图的统计现象:

    这里写图片描述

    为了看懂上图。

    (1)首先介绍一下余弦相似度(cos距离)的概念

    cos距离的取值范围是 [-1,+1],距离越接近-1,表示两个向量的方向 越相反,即呈 负相关关系。

    (2)再来介绍一下pair filter的定义

    一个卷积层有 \(j=1,…,n\) 个卷积核(filter)。 一个卷积核 \(\phi_{i}\)
    对应的pairing filter定义为 \(\overline{\phi_{i}} =
    \mathop{\arg\min}_{\phi_j}cos<\phi_{i},\phi_{j}>\). 即从所有卷积核中选择一个cos相似度最小的卷积核。

    我们再回头看上图。 对所有卷积核寻找其pair filter,并计算cos相似度得到蓝色的统计直方图。 红色的曲线,是假设随机高斯分布生成的卷积核得到的相似度统计。

    现象:

    网络的前部,参数的分布有更强的负相关性(类似于正负对立)。随着网络变深,这种负相关性逐步减弱。

    结论:

    网络的前部,网络倾向于同时捕获正负相位的信息,但ReLU会抹掉负响应。 这造成了卷积核会存在冗余。

    2. CReLU

    CReLU的定义很简单:

    \(CReLU(x) = [ReLU(x),ReLU(-x)]\)

    输出维度会自动加倍。 比如 \(-3 \rightarrow [0,3]\) \(\quad3 \rightarrow [3,0]\)

    在网络中的实现也很简单,甚至不用修改代码(通过scale层取反再经过一次ReLU)

    更多实验结果和讨论请参看原文。

    展开全文
  • CReLU与PReLU的大体简介

    千次阅读 2018-07-31 21:14:12
    本次介绍PReLU激活函数,方法来自于何凯明paper 《Delving Deep into Rectifiers:Surpassing Human-Level Performance on ImageNet Classification》. ...关于CReLU 1. 背景介绍 PReLU激...

    本次介绍PReLU激活函数,方法来自于何凯明paper 《Delving Deep into Rectifiers:Surpassing Human-Level Performance on ImageNet Classification》.

    PReLU激活

    PReLU(Parametric Rectified Linear Unit), 顾名思义:带参数的ReLU。二者的定义和区别如下图:
    PReLU vs. ReLU

    如果ai=0,那么PReLU退化为ReLU;如果ai是一个很小的固定值(如ai=0.01),则PReLU退化为Leaky ReLU(LReLU)。 有实验证明,与ReLU相比,LReLU对最终的结果几乎没什么影响。

    PReLU的几点说明

    (1) PReLU只增加了极少量的参数,也就意味着网络的计算量以及过拟合的危险性都只增加了一点点。特别的,当不同channels使用相同的ai时,参数就更少了。

    (2) BP更新ai时,采用的是带动量的更新方式,如下图:

    带动量更新

    上式的两个系数分别是动量和学习率。
    需要特别注意的是:更新ai时不施加权重衰减(L2正则化),因为这会把ai很大程度上push到0。事实上,即使不加正则化,试验中ai也很少有超过1的。

    (3) 整个论文,ai被初始化为0.25。

    关于CReLU




    一种改进ReLU激活函数的文章,来自ICML2016.

    文章链接: 《Understanding and Improving Convolutional Neural Networks via Concatenated Rectified Linear Units》

    1. 背景介绍

    整个文章的出发点来自于下图的统计现象:

    这里写图片描述

    为了看懂上图。

    (1)首先介绍一下余弦相似度(cos距离)的概念

    cos距离的取值范围是 [-1,+1],距离越接近-1,表示两个向量的方向 越相反,即呈 负相关关系。

    (2)再来介绍一下pair filter的定义

    这里写图片描述
    现象:

    网络的前部,参数的分布有更强的负相关性(类似于正负对立)。随着网络变深,这种负相关性逐步减弱。

    结论:

    网络的前部,网络倾向于同时捕获正负相位的信息,但ReLU会抹掉负响应。 这造成了卷积核会存在冗余。
    2. CReLU

    CReLU的定义很简单:
    这里写图片描述
    输出维度会自动加倍。 比如 −3→[0,3] 3→[3,0]

    在网络中的实现也很简单,甚至不用修改代码(通过scale层取反再经过一次ReLU)
    这里写图片描述

    参考链接: 点击打开链接

    展开全文
  • pytorch crelu

    千次阅读 2019-07-26 21:01:36
    维度0位batch_size, a = torch.cat((F.relu6(x), F.relu6(-x)), 1) m = nn.ReLU() input = torch.randn(2).unsqueeze(0) output = torch.cat((m(input),m(-input)))
  • keras版本CReLU

    2019-10-28 17:16:34
    将深度学习网络的前几层的卷积结构,换成CReLU可以提升效果。CReLU在pytorch中嵌入非常简单,按照定义和前向推理的方式即可定义CReLU。 今天项目需求,在keras上嵌入CReLU,由于对keras用法并不熟悉,遇到了一些...
  • ReLU、LReLU、PReLU、CReLU、ELU、SELU

    万次阅读 多人点赞 2018-01-22 22:25:34
    CReLU ELU SELUReLU tensorflow中:tf.nn.relu(features, name=None)LReLU(Leaky-ReLU) 其中aia_i是固定的。ii表示不同的通道对应不同的aia_i. tensorflow中:tf.nn.leaky_relu(features, alpha=0.2, name=None...
  • CRelu 激活函数

    千次阅读 2018-09-28 13:03:36
    对此我们设计了CReLU, It simply makes an identical copy of the linear responses after convolution, negate them, concatenate both parts of activation, and then apply ReLU altogether 和其他方法结果...
  • tensorflow中:tf.nn.crelu(features, name=None) ELU     其中α是一个可调整的参数,它控制着ELU负值部分在何时饱和。  右侧线性部分使得ELU能够缓解梯度消失,而左侧软饱能够让ELU对输入变化或噪声更鲁棒。ELU...
  • PVANet中的改进后的CReLU的caffe实现

    千次阅读 2017-11-16 15:40:38
    https://github.com/sanghoon/pva-faster-rcnn/blob/master/models/pvanet/pva9.1/faster_rcnn_train_test_21cls.pt layer {  name: "conv1_1/conv"  type: "Convolution"  bottom: "data"  top: "conv1_1/
  • CRelu --ICML2016

    2019-11-01 14:16:39
    CReLU(x)=[ReLU(x),ReLU(−x)] 输出维度会自动加倍。 比如 − 3 → [ 0 , 3 ] −3→[0,3] 在网络中的实现也很简单,甚至不用修改代码(通过scale层取反再经过一次ReLU) 更多实验结果和讨论请参看原文。 ...
  • 其他基于RELU的变化有:渗漏整流单元(Leaky Relu),参数化整流线性单元(PRelu),ELU,SELU,CRelu,RRelu PRelu 参数化整流线性单元: 在LRelu的基础上将定值0.01变换为 ELU(exponential linear units ...
  • Difference between ReLU、LReLU、PReLU、CReLU、ELU、SELU 激活函数 ReLU、LReLU、PReLU、CReLU、ELU、SELU 的定义和区别 ReLU tensorflow中:tf.nn.relu(features, name=None) RELU的优点即计算特别简单,...
  • 论文作者在 AlexNet 的模型上做了一个有趣的实验,发现:较低的卷积层中的一些滤波器核存在着负相关程度很高的滤波器核,而层次越高的卷积层,这一...基于这一现象作者认为低层的卷积层具有冗余性,于是提出了CReLU
  • 撸一撸 ICML2016的CReLU

    万次阅读 2017-09-05 15:19:56
    此方法来源于: ICML2016 Understanding and Improving Convolutional Neural Networks via Concatenated Rectified Linear...实验代码 :https://github.com/albanie/CReLU 可以在理解原理的基础上撸一遍。 在tenso
  • CReLU ELU SELU ReLU   tensorflow中:tf.nn.relu(features, name=None) LReLU (Leaky-ReLU)    其中 a i ai 是固定的。 i i 表示不同的通道对应不同的 a i ai .  tensorflow中:tf.nn.leaky_relu(features, ...
  • 这里有个可视化、直观的图:https://github.com/vdumoulin/conv_arithmetic https://zhuanlan.zhihu.com/p/50369448 https://www.zhihu.com/question/54149221/answer/192025860 ...
  • https://stackoverflow.com/questions/28437071/pylint-1-4-reports-e1101no-member-on-all-c-extensions
  • CReLU的全称Concatenated RectifiedLinear Units,相当于把两个ReLU级联起来,输出维度会自动加倍,比如:CeLU(−3)= [0,3],CeLU(3) = [3,0]。因此,在使用CReLU时要有意识的将滤波器数量减半,否则会将输入的...
  • FaceBoxes人脸检测(阅读整理)

    千次阅读 2019-01-22 13:32:27
     (conv1): CRelu(  (conv): Conv2d(3, 24, kernel_size=(7, 7), stride=(4, 4), padding=(3, 3), bias=False)  (bn): BatchNorm2d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)  ) ...
  • Default: False shape: 示例 >>> m = nn.ReLU() >>> input = torch.randn(2) >>> output = m(input) An implementation of CReLU - https://arxiv.org/abs/1603.05201 >>> m = nn.ReLU() >>> input = torch.randn...
  • 人脸检测之FaceBoxes解读

    千次阅读 2019-03-20 14:27:48
    CReLU C R e L U 可以通过在 R e L U ReLU R e L U 之前简单地 C o n c a t Concat C o n c a t 否定的输出来使输出通道的数量加倍。 使用 C R e L U CReLU C R e L U 可显着提高速度,而且精度基本无下降。 ...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 376
精华内容 150
关键字:

CRelu