CNN 权重初始化 代码
时间: 2024-12-19 13:08:11 浏览: 8
p-cnn-visualizations_pytorch_CNN_CNN可视化_
5星 · 资源好评率100%
卷积神经网络 (CNN) 的权重初始化是一个关键步骤,它影响着模型训练的收敛速度和最终性能。一种常见的初始化策略是使用 "Xavier 初始化" 或 "He 初始化",它们针对卷积层和全连接层有不同的计算方式。
1. **Xavier初始化**(也称为 Glorot 初始化)适用于输入数据维度接近的情况,目的是使得前向传播和反向传播信号的速度相等。对于卷积层,每个滤波器(kernel)的权重矩阵 `W` 的元素值初始化为:
```python
import numpy as np
def xavier_init(fan_in, fan_out):
std = np.sqrt(2 / (fan_in + fan_out))
return np.random.randn(fan_in, fan_out) * std
# 示例
kernel_size = (3, 3)
in_channels = 3
out_channels = 64
W = xavier_init(in_channels, out_channels * kernel_size[0] * kernel_size[1])
```
2. **He初始化**(适合于深度网络),特别是对于激活函数是 ReLU 类型的,因为 ReLU 函数在输入为负时会变为零,所以需要更大的初始标准差防止梯度消失。对于同样大小的卷积层,He 初始化的公式是:
```python
def he_init(fan_in):
std = np.sqrt(2 / fan_in)
return np.random.randn(fan_in, out_channels * kernel_size[0] * kernel_size[1]) * std
# 使用 He 初始化
W = he_init(in_channels)
```
阅读全文