0

我有:

init1 = tf.random_normal_initializer(0., 0.02)
init2 = tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.02)

当用于创建 tf.Variables 时,这两个似乎都给出了相似的结果:

tf.Variable(init1(shape=[3], dtype=tf.float32))
>> <tf.Variable 'Variable:0' shape=(3,) dtype=float32, numpy=array([-0.02076386,  0.02649704, -0.01076219], dtype=float32)>

tf.Variable(init2(shape=[3], dtype=tf.float32)) 
 >> <tf.Variable 'Variable:0' shape=(3,) dtype=float32, numpy=array([ 0.01218272, -0.00031702, -0.00397457], dtype=float32)>

当与张量流层一起使用时:

tfa.layers.InstanceNormalization(gamma_initializer=init1)tfa.layers.InstanceNormalization(gamma_initializer=init2)我而言。

使用一种代替另一种,以及何时使用有tf.random_normal_initializer什么区别?tf.keras.initializers.RandomNormal

4

1 回答 1

1

它们之间没有区别。两者都等于使用和选择。

你得到不同的输出,因为它们是随机生成器。如果要确保它们相同,请尝试设置seed参数:

init1 = tf.random_normal_initializer(0., 0.02, seed=42)
init2 = tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.02, seed=42)

print(tf.Variable(init1(shape=[3], dtype=tf.float32)))
print(tf.Variable(init2(shape=[3], dtype=tf.float32)))

结果:

<tf.Variable 'Variable:0' shape=(3,) dtype=float32, numpy=array([ 0.00031634, -0.03180174,  0.00207189], dtype=float32)>
<tf.Variable 'Variable:0' shape=(3,) dtype=float32, numpy=array([ 0.00031634, -0.03180174,  0.00207189], dtype=float32)>
于 2021-09-13T07:12:05.783 回答