#AI挑战营终点站#模型优化--激活函数比较
本帖最后由 wakojosin 于 2024-6-23 17:40 编辑# 模型介绍
使用的模型是LeNET,模型结构如下:
- 输入层:接收32x32的灰度图像;
- C1卷积层:使用6个5x5的卷积核进行卷积操作,输出尺寸为28x28;
- S2池化层:使用2x2的平均池化操作,输出14x14;
- C3卷积层:使用16个5x5卷积核对S2的输出进行卷积,输出尺寸为10x10
- S4池化层:再次使用2x2的平均池化,输出尺寸5x5;
- C5卷积层:这是全连接层前的卷积操作,使用120个5x5的卷积核,在之前特征图的基础上进行全连接计算,输出1x1x120的特征向量;
- F6全连接层:拥有84个神经元,将C5的输出进一步压缩为一个固定长度的向量,用于分类前的特征表示;
- 输出层:最后一个逻辑回归(或层softmax层),用于将F6的输出转化为10类输出的概率分布,对应0~9的数字
## 模型
```python
# act_func = nn.Softmax()
act_func = nn.ReLU()
net = torch.nn.Sequential(
# Reshape(),
nn.Conv2d(1, 6, kernel_size=5, stride=1), act_func, # (32-5)/1+1=28
nn.AvgPool2d(kernel_size=2, stride=2), # (28-2)/2+1=14
nn.Conv2d(6, 16, kernel_size=5), act_func, # 14-5+1=10
nn.AvgPool2d(kernel_size=2, stride=2), # (10-2)/2+1=5
nn.Flatten(),
nn.Linear(16 * 5 * 5, 120), act_func,
nn.Linear(120, 84), act_func,
nn.Linear(84, 10)
)
```
# 优化对比
此次优化对比主要是针对激活函数。
## 激活函数
1. ReLU
函数f(x)=max(0,x)
特点:
- 计算简单,只有线性关系和阈值操作,不会出现梯度饱和
- 对负数输出恒为0,可能会导致部分神经元永远不被激活;
2. Sigmoid
函数f(x)=1/(1+e^(-x))
特点:
- 输出范围有限,介于0~1之间,适用于二分类概率输出场景;
- 输出连续可微,适用于逻辑回归等模型;
- 当输入绝对值较大时,sigmoid函数的导数值非常接近0(梯度饱和),导致反向传播时梯度消失,会减慢学习过程;
- 计算相对复杂,设计指数运算,比ReLU更耗时;
3. Softmax
函数p(i)=e^z(i)/sum(e^z(j)),j=1..n
特点:
- 概率输出,将输入转化为概率分布,所有输出之和为1,非常适合多分类任务;
- 类别间比较,提供一种自然的方式比较不同类别的相对置信度;
- 计算复杂,相比ReLU和Sigmoid,sofsh书倒数tmax涉及到更加复杂的数学计算,包括指数和归一化;
-
## 结果对比
激活函数的实际效果:
func |Avg.Loss|Accuracy|speed
:-:| :-:| :-:|:-:
Softmax|0.000047|0.985500|mid
sigmoid|0.000058|0.981900|slow
ReLU |0.000028|0.990900|quick
<p>ReLU 前几天看一个说法,改变世界的算式,但是简单的第一天学编程的都能做出来。</p>
<p>你这个模型激活函数分析和对比,还是挺有意义的。</p>
页:
[1]