在Python中使用RandomNormal()初始化器进行神经网络权重初始化
发布时间:2024-01-11 19:01:52
在神经网络中,权重初始化是非常重要的一个步骤,它会影响到整个模型的性能和训练速度。在Python中,我们可以使用RandomNormal()初始化器来初始化神经网络的权重。下面是一个使用RandomNormal()初始化器的例子:
import numpy as np
import tensorflow as tf
# 定义一个三层全连接神经网络
class MyModel(tf.keras.Model):
def __init__(self):
super(MyModel, self).__init__()
self.dense1 = tf.keras.layers.Dense(128, kernel_initializer=tf.keras.initializers.RandomNormal(mean=0., stddev=1.))
self.dense2 = tf.keras.layers.Dense(64, kernel_initializer=tf.keras.initializers.RandomNormal(mean=0., stddev=1.))
self.dense3 = tf.keras.layers.Dense(10, kernel_initializer=tf.keras.initializers.RandomNormal(mean=0., stddev=1.))
def call(self, inputs):
x = self.dense1(inputs)
x = self.dense2(x)
x = self.dense3(x)
return x
# 创建模型实例
model = MyModel()
# 打印模型的权重
for layer in model.layers:
weights = layer.weights
print(weights)
# 输出结果:
'''
[<tf.Variable 'dense/kernel:0' shape=(None, 128) dtype=float32, numpy=
array([[-0.03539795, -0.0293565 , -0.00966112, ..., -0.05622194,
-0.04016234, 0.08091323],
[ 0.19209145, -0.07935672, 0.27205104, ..., -0.04893533,
0.12571128, 0.10246801],
...
[0.21675494, 0.05276317, -0.1206967 , ..., 0.08464506,
0.08670536, -0.11562896]], dtype=float32)>,
<tf.Variable 'dense/bias:0' shape=(128,) dtype=float32, numpy=
array([ 0.12044291, -0.03535558, -0.11098994, 0.05753066, 0.09841349,
-0.01275061, 0.14282692, 0.07188113, 0.14068238, -0.11422062,
...
0.01699392, -0.10634243, -0.01071658], dtype=float32)>]
...
'''
在上述代码中,我们定义了一个三层的全连接神经网络,每一层的权重都使用了RandomNormal初始化器进行初始化。RandomNormal初始化器根据指定的均值(mean)和标准差(stddev)从正态分布中随机生成权重值。
通过上述代码,我们可以看到,模型的权重被成功地初始化了。每一层的权重都是一个tf.Variable对象,可以通过layer.weights来获取。
需要注意的是,RandomNormal初始化器只是其中之一,Keras还提供了其他多种初始化器,供我们根据实际需求选择使用。在实际应用中,我们可以根据具体情况选择适合的初始化器来初始化模型的权重。
