tf.random_normal()和tf.random_normal_initializer()之间的区别

时间:2018-06-04 23:58:00

标签: tensorflow random

我这些天学习Tensorflow。 使用随机变量时,我注意到有两个不同的版本。一个是tf.random_normal()等API,其他API是tf.random_normal_initialize()等API。我认为那两个人正在做同样的事情。以下是一个例子。

random_normal = tf.random_normal_initializer(0.0, 1.0, seed=0)
a = random_normal([10])
b = tf.random_normal([10], 0.0, 1.0)

with tf.Session() as sess:
    print (sess.run(a))
    print (sess.run(b))

我有两个问题。

Q1。如果这两者完全相同,为什么他们会制作重复的API?

Q2。我假设Tensorflow中的类名以大写字母开头,例如tf.Variable和" op"以较小的案例开始。那么为什么tf.random_normal_initializer以小写字母开头,而实际上是一个类而不是操作。

1 个答案:

答案 0 :(得分:1)

您是否看过各自的实施?初始化程序(已定义here)是一个内部调用tf.random_normal()的类,它只是一个操作(定义为here)。例如,可以导出类实例的属性以供进一步使用,而op的参数不能。

关于你的第二个问题:你的假设是正确的。但使用的名称只是一个别名。在相应的文件中写入

@tf_export("keras.initializers.RandomNormal", "initializers.random_normal",
       "random_normal_initializer")
class RandomNormal(Initializer):
  """Initializer that generates tensors with a normal distribution.

您可以看到这与命名约定一致。

希望这有帮助。