激活函数(relu,prelu,elu,+BN)对比on cifar10

article/2025/9/21 17:01:41

最近做了个对比实验,通过修改激活函数观察对图片分类准确率的影响,现记录如下:


一.理论基础
1.1激活函数
这里写图片描述

1.2 elu论文(FAST AND ACCURATE DEEP NETWORK LEARNING BY
EXPONENTIAL LINEAR UNITS (ELUS))
1.2.1 摘要
    论文中提到,elu函数可以加速训练并且可以提高分类的准确率。它有以下特征:
1)elu由于其正值特性,可以像relu,lrelu,prelu一样缓解梯度消失的问题。
2)相比relu,elu存在负值,可以将激活单元的输出均值往0推近,达到
batchnormlization的效果且减少了计算量。(输出均值接近0可以减少偏移效应进而使梯
度接近于自然梯度。)
3)Lrelu和prelu虽然有负值存在,但是不能确保是一个噪声稳定的去激活状态。
4)Elu在负值时是一个指数函数,对于输入特征只定性不定量。
1.2.2.bias shift correction speeds up learning
    为了减少不必要的偏移移位效应,做出如下改变:(i)输入单元的激活可以
以零为中心,或(ii)可以使用具有负值的激活函数。 我们介绍一个新的
激活函数具有负值,同时保持正参数的特性,即elus。
1.2.4实验
    作者把elu函数用于无监督学习中的autoencoder和有监督学习中的卷积神经网络;
elu与relu,lrelu,SReLU做对比实验;数据集选择mnist,cifar10,cifar100.

2ALL-CNN for cifar-10
2.1结构设计
这里写图片描述
ALL-CNN结构来自论文(STRIVING FOR SIMPLICITY:
THE ALL CONVOLUTIONAL NET)主要工作是把pool层用stride=2的卷积来代替,提出了一些全卷积网络架构,kernel=3时效果最好,最合适之类的,比较好懂,同时效果也不错,比原始的cnn效果好又没有用到一些比较大的网络结构如resnet等。
附上:

Lrelu实现:
def lrelu(x, leak=0.2, name="lrelu"):
return tf.maximum(x, leak * x)Prelu实现:
def parametric_relu(_x):
alphas = tf.get_variable('alpha', _x.get_shape()[-1],
initializer=tf.constant_initializer(0.25),
dtype = tf.float32
)
pos = tf.nn.relu(_x)
neg = alphas * (_x - abs(_x)) * 0.5
print(alphas)
return pos + negBN实现:     
def batch_norm(x, n_out,scope='bn'):"""Batch normalization on convolutional maps.Args:x: Tensor, 4D BHWD input mapsn_out: integer, depth of input mapsphase_train: boolean tf.Variable, true indicates training phasescope: string, variable scopeReturn:normed: batch-normalized maps"""with tf.variable_scope(scope):beta = tf.Variable(tf.constant(0.0, shape=[n_out]),name='beta', trainable=True)gamma = tf.Variable(tf.constant(1.0, shape=[n_out]),name='gamma', trainable=True)tf.add_to_collection('biases', beta)tf.add_to_collection('weights', gamma)batch_mean, batch_var = tf.nn.moments(x, [0,1,2], name='moments')ema = tf.train.ExponentialMovingAverage(decay=0.99)def mean_var_with_update():ema_apply_op = ema.apply([batch_mean, batch_var])with tf.control_dependencies([ema_apply_op]):return tf.identity(batch_mean), tf.identity(batch_var)#mean, var = control_flow_ops.cond(phase_train,# mean, var = control_flow_ops.cond(phase_train,#   mean_var_with_update,#   lambda: (ema.average(batch_mean), ema.average(batch_var)))mean, var = mean_var_with_update()normed = tf.nn.batch_normalization(x, mean, var,beta, gamma, 1e-3)return normed

在cifar10 上测试结果如下:

这里写图片描述

以loss所有结果如下:relu+bn>elu>prelu>elubn>relu
这里写图片描述

所有的测试准确率如下
这里写图片描述
这里写图片描述

relu+bn组合准确率最高,relu+bn>elu>prelu>elubn>relu
可见elu在激活函数里表现最好,但是它不必加BN,这样减少了BN的计算量。

3.ALL-CNN for cifar-100
cifar100数据集
CIFAR-100 python version,下载完之后解压,在cifar-100-python下会出现:meta,test和train
三个文件,他们都是python用cPickle封装的pickled对象
解压:tar -zxvf xxx.tar.gz
cifar-100-python/
cifar-100-python/file.txt~
cifar-100-python/train
cifar-100-python/test
cifar-100-python/meta
def unpickle(file):
import cPickle
fo = open(file, ‘rb’)
dict = cPickle.load(fo)
fo.close()
return dict
通过以上代码可以将其转换成一个dict对象,test和train的dict中包含以下元素:
data——一个nx3072的numpy数组,每一行都是(32,32,3)的RGB图像,n代表图像个数
coarse_labels——一个范围在0-19的包含n个元素的列表,对应图像的大类别
fine_labels——一个范围在0-99的包含n个元素的列表,对应图像的小类别
而meta的dict中只包含fine_label_names,第i个元素对应其真正的类别。
二进制版本(我用的)
<1 x coarse label><1 x fine label><3072 x pixel>

<1 x coarse label><1 x fine label><3072 x pixel>
网络结构直接在cifar10的基础上输出100类即可,只对cifar100的精细标签100个进行分类任务,因此代码里取输入数据集第二个值做为标签。(tensorflow的cifar10代码)

label_bytes =2 # 2 for CIFAR-100
#取第二个标签100维
result.label = tf.cast(
tf.strided_slice(record_bytes, [1], [label_bytes]), tf.int32)

在all CNN 9层上,大约50k步,relu+bn组合测试的cifar100 test error为0.36


http://chatgpt.dhexx.cn/article/nYACZ3Ch.shtml

相关文章

22个激活函数,ReLU、RReLU、LeakyReLU、PReLU、Sofplus、ELU、CELU、SELU、GELU、ReLU6、Sigmoid、Tanh、Softsign、Hardtanh等

转自&#xff1a;https://www.pianshen.com/article/33331174884/ 1.22.Linear常用激活函数 1.22.1.ReLU torch.nn.ReLU() 1.22.2.RReLU torch.nn.RReLU() 1.22.3.LeakyReLU torch.nn.LeakyReLU() 1.22.4.PReLU torch.nn.PReLU() 1.22.5.Sofplus torch.nn.Softplus() 1.22.6.E…

常用激活函数(Sigmiod、Tanh、Softmax、ReLU、elu、LReLU、Softplus)函数表达式、特点、图像绘制(代码)---已解决

楼主最近在研究激活函数&#xff0c;索性将常用的激活函数进行了简单的整理&#xff0c;方便以后翻看&#xff0c;也希望能帮到你。 1、sigmoid函数 函数表达式&#xff1a;f(x) 1/(1e^-x) 函数特点&#xff1a; 优点&#xff1a;1.输出[0,1]之间&#xff1b;2.连续函数&#…

Sigmoid,tanh,Relu,Leaky ReLu,ELU,GeLu 激活函数理解

目录 1 神经网络为什么需要非线性激活函数&#xff1f;2 Sigmoid2.1缺陷2.1.1 梯度消失2.2.2 Output非zero-centered 3 Tanh3.1 缺陷 4 ReLu4.1 缺陷 5 Leaky ReLu6 ELU7 GeLu7.1 基础知识回顾7.1.1 正态分布7.1.2 概率密度函数7.1.3 累积分布函数7.1.4 Φ(x)与erf(x)函数关系公…

Elu函数~小朋友

Elu激励函数的数学表达式如下&#xff1a; 图一&#xff1a;摘自 https://blog.csdn.net/zrh_CSDN/article/details/81266188 代码如下&#xff1a; #code:utf-8import numpy as np import matplotlib.pyplot as pltdef elu(x,a):y x.copy()for i in range(y.shape[0]):if y[…

【Python--torch(激活函数说明+代码讲解)】激活函数(sigmoid/softmax/ELU/ReLU/LeakyReLU/Tanh)

【Python–torch】激活函数(sigmoid/softmax/ELU/ReLU/LeakyReLU/Tanh) 文章目录 【Python--torch】激活函数(sigmoid/softmax/ELU/ReLU/LeakyReLU/Tanh)1. 介绍2. 常用激活函数说明2.1 Sigmoid2.1.1 公式2.1.2 图像2.1.3 代码解读 2.2 Softmax2.2.1 公式2.2.2 代码解读 2.3 EL…

A.深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…

el-descriptions

<el-descriptions title"用户信息"><el-descriptions-item label"用户名">kooriookami</el-descriptions-item><el-descriptions-item label"手机号">18100000000</el-descriptions-item><el-descriptions-ite…

功能性模块:(8)一文理解常用激活函数(Sigmoid,ReLU,ELU,GELU...)

一文理解常用激活函数 1. Sigmoid 公式&#xff1a; Sigmoid ( x ) 1 1 exp ⁡ ( − x ) \text{Sigmoid}(x) \frac{1}{1 \exp(-x)} Sigmoid(x)1exp(−x)1​ Sigmoid的函数形状如下图所示: 对应的导数形式如下图所示&#xff1a; Sigmoid函数的优点&#xff1a; 便于求…

深入理解ReLU、Leaky ReLU、 PReLU、ELU、Softplus

文章目录 ReLULeaky ReLUPReLUELUSoftplus ReLU ReLU&#xff08;Rectified Linear Unit&#xff0c;修正线性单元&#xff09;&#xff0c;也叫Rectifier 函数&#xff0c;它的定义如下&#xff1a; Relu可以实现单侧抑制&#xff08;即把一部分神经元置0&#xff09;&#x…

搞懂激活函数(Sigmoid/ReLU/LeakyReLU/PReLU/ELU)

1. 简介 在深度学习中&#xff0c;输入值和矩阵的运算是线性的&#xff0c;而多个线性函数的组合仍然是线性函数&#xff0c;对于多个隐藏层的神经网络&#xff0c;如果每一层都是线性函数&#xff0c;那么这些层在做的就只是进行线性计算&#xff0c;最终效果和一个隐藏层相当…

YOLOv5改进系列(13)——更换激活函数之SiLU,ReLU,ELU,Hardswish,Mish,Softplus,AconC系列等

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制

【PyTorch】教程:torch.nn.ELU

torch.nn.ELU CLASS torch.nn.ELU(alpha1.0, inplaceFalse) paper: Fast and Accurate Deep Network Learning by Exponential Linear Units (ELUs). 参数 alpha ([float]) – α \alpha α 默认为1.0inplace ([bool] ) – 内部做, 默认为 False ELU 定义 ELU ( x ) { x , …

【YOLOv7/YOLOv5系列算法改进NO.54】改进激活函数为ReLU、RReLU、Hardtanh、ReLU6、Sigmoid、Tanh、Mish、Hardswish、ELU、CELU等

文章目录 前言一、解决问题二、基本原理三、​添加方法四、总结 前言 作为当前先进的深度学习目标检测算法YOLOv7&#xff0c;已经集合了大量的trick&#xff0c;但是还是有提高和改进的空间&#xff0c;针对具体应用场景下的检测难点&#xff0c;可以不同的改进方法。此后的系…

常用激活函数:Sigmoid、Tanh、Relu、Leaky Relu、ELU优缺点总结

1、激活函数的作用 什么是激活函数&#xff1f; 在神经网络中&#xff0c;输入经过权值加权计算并求和之后&#xff0c;需要经过一个函数的作用&#xff0c;这个函数就是激活函数&#xff08;Activation Function&#xff09;。 激活函数的作用&#xff1f; 首先我们需要知道…

深度学习—激活函数详解(Sigmoid、tanh、ReLU、ReLU6及变体P-R-Leaky、ELU、SELU、Swish、Mish、Maxout、hard-sigmoid、hard-swish)

非线性激活函数详解 饱和激活函数Sigmoid函数tanh函数hard-Sigmoid函数 非饱和激活函数Relu&#xff08;修正线性单元&#xff09;&#xff1a;Relu6&#xff08;抑制其最大值&#xff09;&#xff1a;ELU&#xff08;指数线性单元&#xff09;SELULeaky-Relu / R-ReluP-Relu&a…

激活函数详解(ReLU/Leaky ReLU/ELU/SELU/Swish/Maxout/Sigmoid/tanh)

神经网络中使用激活函数来加入非线性因素&#xff0c;提高模型的表达能力。 ReLU(Rectified Linear Unit,修正线性单元) 形式如下: ReLU公式近似推导:: 下面解释上述公式中的softplus,Noisy ReLU. softplus函数与ReLU函数接近,但比较平滑, 同ReLU一样是单边抑制,有宽广的接受…

【卷积神经网络】12、激活函数 | Tanh / Sigmoid / ReLU / Leaky ReLU / ELU / SiLU / Mish

文章目录 一、Tanh二、Sigmoid三、ReLU四、Leaky ReLU五、ELU六、SiLU七、Mish 本文主要介绍卷积神经网络中常用的激活函数及其各自的优缺点 最简单的激活函数被称为线性激活&#xff0c;其中没有应用任何转换。 一个仅由线性激活函数组成的网络很容易训练&#xff0c;但不能学…

神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout)

神经网络激活函数汇总&#xff08;Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout&#xff09; 常规 sigmoid 和 tanh sigmoid 特点&#xff1a;可以解释&#xff0c;比如将0-1之间的取值解释成一个神经元的激活率&#xff08;firing rate&#xff09; 缺陷&#xff1…

神经网络激活函数优缺点和比较(sigmod,tanh,relu,softmax,leaky relu,ELU,SELU)

文章目录 前言一、sigmoid函数二、tanh函数三&#xff0c;ReLU函数四&#xff0c; Leaky ReLU五&#xff0c;ELU指数线性单元函数&SELU函数六&#xff0c;softmax函数 前言 理想的激活函数应该有的性质 非线性&#xff1a;这个条件是多层神经网络形成的基础&#xff0c;保…

常用激活函数:Sigmoid/Softmax/ELU/ReLU/LeakyReLU/Tanh...(Pytorch)

激活函数 一、Sigmoid1.介绍2.实例 二、Softmax1.介绍2.实例 三、ELU&#xff1a;指数线性单元函数1.介绍2.实例 四、ReLU&#xff1a;整流线性单元函数1.介绍2.实例 五、ReLU61.介绍2.实例 六、LeakyReLU1.介绍2.实例 七、Tanh&#xff1a;双曲正切函数1.介绍2.实例 一、Sigmo…