一个域名怎么用来做多个网站,建立网站要钱吗,东莞专业网站制作设计,wordpress 仿雷锋网概念
神经网络权重的初始化是深度学习中的重要步骤#xff0c;良好的权重初始化可以加速模型的训练收敛#xff0c;提高模型的性能和稳定性。以下是一些常用的权重初始化方法#xff1a;
零初始化#xff08;Zero Initialization#xff09;#xff1a;将权重初始化为零…概念
神经网络权重的初始化是深度学习中的重要步骤良好的权重初始化可以加速模型的训练收敛提高模型的性能和稳定性。以下是一些常用的权重初始化方法
零初始化Zero Initialization将权重初始化为零。然而这种方法不太适合深层神经网络因为它会导致所有神经元在同一时间具有相同的输出从而破坏了网络的对称性。因此在实践中很少使用纯粹的零初始化。
随机初始化Random Initialization将权重初始化为随机值。常见的随机初始化方法包括
均匀分布Uniform Distribution在某个范围内随机采样权重值如 [ − a , a ] [-a, a] [−a,a]。 正态分布Normal Distribution从均值为 0、标准差为 σ \sigma σ 的正态分布中随机采样权重值。 随机初始化的目的是打破权重的对称性使不同神经元可以学到不同的特征。
Xavier 初始化Glorot InitializationXavier 初始化是一种常用的权重初始化方法特别适用于 sigmoid 和 tanh 等激活函数。对于具有 n n n 个输入和 m m m 个输出的全连接层Xavier 初始化从均匀分布 U [ − 6 n m , 6 n m ] U[-\sqrt{\frac{6}{nm}}, \sqrt{\frac{6}{nm}}] U[−nm6 ,nm6 ] 中采样权重值。
He 初始化He 初始化是适用于 ReLU 激活函数的权重初始化方法。对于具有 n n n 个输入的全连接层He 初始化从正态分布 N ( 0 , 2 n ) N(0, \sqrt{\frac{2}{n}}) N(0,n2 ) 中采样权重值。
LeCun 初始化LeCun 初始化是适用于 tanh 激活函数的权重初始化方法。对于具有 n n n 个输入的全连接层LeCun 初始化从均匀分布 U [ − 1 n , 1 n ] U[-\sqrt{\frac{1}{n}}, \sqrt{\frac{1}{n}}] U[−n1 ,n1 ] 中采样权重值。
Orthogonal 初始化Orthogonal 初始化是将权重矩阵初始化为正交矩阵有助于防止梯度消失和梯度爆炸。这种方法特别适用于循环神经网络RNN等架构。
代码实现
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers# 生成示例数据
X np.random.rand(100, 10)# 定义模型
def build_model(initializer):model keras.Sequential([layers.Input(shape(X.shape[1],)),layers.Dense(64, activationrelu, kernel_initializerinitializer),layers.Dense(32, activationrelu, kernel_initializerinitializer),layers.Dense(1, activationsigmoid, kernel_initializerinitializer)])return model# 随机初始化均匀分布
random_initializer tf.keras.initializers.RandomUniform(minval-0.05, maxval0.05)
model_random build_model(random_initializer)
model_random.compile(optimizeradam, lossbinary_crossentropy, metrics[accuracy])# Xavier 初始化
xavier_initializer tf.keras.initializers.GlorotUniform()
model_xavier build_model(xavier_initializer)
model_xavier.compile(optimizeradam, lossbinary_crossentropy, metrics[accuracy])# He 初始化
he_initializer tf.keras.initializers.he_normal()
model_he build_model(he_initializer)
model_he.compile(optimizeradam, lossbinary_crossentropy, metrics[accuracy])# LeCun 初始化
lecun_initializer tf.keras.initializers.lecun_uniform()
model_lecun build_model(lecun_initializer)
model_lecun.compile(optimizeradam, lossbinary_crossentropy, metrics[accuracy])# Orthogonal 初始化
orthogonal_initializer tf.keras.initializers.orthogonal()
model_orthogonal build_model(orthogonal_initializer)
model_orthogonal.compile(optimizeradam, lossbinary_crossentropy, metrics[accuracy])# 打印各种初始化方法的模型结构
print(Random Initialization:)
model_random.summary()print(\nXavier Initialization:)
model_xavier.summary()print(\nHe Initialization:)
model_he.summary()print(\nLeCun Initialization:)
model_lecun.summary()print(\nOrthogonal Initialization:)
model_orthogonal.summary()