tensorflow中常用的几种权重矩阵初始化的方式

本文介绍了三种常见的权重矩阵初始化方法:截断的正态分布、Xavier 初始化器以及 CS231n 推荐的初始化方法,并给出了具体的实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里总结几种权重矩阵的初始化方式:

1:截断的正态分布:

def init_matrix(shape):
    return tf.truncated_normal(shape, mean=0, stddev=0.1)

2.xavier_initializer()法:这个初始化器是用来保持每一层的梯度大小都差不多相同

W = tf.get_variable("W", shape=[784, 100],
                initializer=tf.contrib.layers.xavier_initializer())

3.cs231n推荐:

w=np.random.randn(in,out)/np.sqrt(2.0/in)#in,out为输入输出的神经元个数

使用:
W1_init = np.random.randn(784, 100).astype(np.float32) * np.sqrt(2.0/(784))
b1_init = np.zeros([100]).astype(np.float32)
W2_init = np.random.randn(100, 100).astype(np.float32) * np.sqrt(2.0/(100))
b2_init = np.zeros([100]).astype(np.float32)
W3_init = np.random.randn(100, 10).astype(np.float32) * np.sqrt(2.0/(100))
b3_init = np.zeros([10]).astype(np.float32)
W_inits = [W1_init, b1_init, W2_init, b2_init, W3_init, b3_init]
BP神经网络(Backpropagation Neural Network)中的权重初始化是一个关键步骤,它直接影响到模型的学习能力和训练效率。在Python中,特别是在深度学习库如TensorFlow或PyTorch中,通常有几种常见的初始化策略: 1. 零初始化(Zero Initialization):所有权重设置为0,但这种方法可能导致梯度消失或爆炸的问题。 2. 随机初始化(Random Initialization):例如,常用于Sigmoid激活函数的是Xavier(也称He)初始化,即对于每一层,输入节点数乘以输出节点数的平方根的随机值。TensorFlow中有`tf.keras.initializers.he_uniform()`或`he_normal()`函数。 3. Glorot初始化(又称Xavier初始化):另一种常用的随机初始化策略,保证了前向传播和反向传播的梯度相等,可以避免梯度消失或爆炸。对应于均匀分布`glorot_uniform()`, 对称的正态分布则用`glorot_normal()`。 4. He初始化(适合ReLU等非饱和激活函数):对ReLU激活函数,推荐使用He初始化,其标准差更大,对于负偏置的节点也有更好的效果。 5. Orthogonal Initialization:特别适用于自编码器,通过正交矩阵保证权重之间的线性独立,防止模式塌陷。 使用这些初始化时,记得在构建神经网络模型时给每个层的权重应用相应的初始化方法。例如,在Keras中,可以在创建全连接层时指定权重初始化: ```python from tensorflow import keras model.add(keras.layers.Dense(units=hidden_units, activation='relu', kernel_initializer='he_uniform')) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值