gpt4 book ai didi

python - 这两个相似的 TensorFlow 脚本中的输出是如何确定的?

转载 作者:太空宇宙 更新时间:2023-11-03 14:07:14 24 4
gpt4 key购买 nike

下面是来自 https://www.tensorflow.org/programmers_guide/low_level_intro#training 的两个 TensorFlow 脚本。我对此很陌生,并试图拼凑出一个解释/理解;我在脚本下面列出了三个问题。

x = tf.placeholder(tf.float32, shape=[None, 3])
linear_model = tf.layers.Dense(units=1)
y = linear_model(x)

init = tf.global_variables_initializer()
sess.run(init)

print(sess.run(y, {x: [[1, 2, 3], [4, 5, 6]]}))
  • 我注意到输出包含一个数组,其中包含两个单独的数组,每个数组包含一个值
  • 第一个值始终介于 0 - 6.9999999 之间
  • 第二个数组中的第二个值介于 0 - 15.9999999 之间
<小时/>
x = tf.constant([[1], [2], [3], [4]], dtype=tf.float32)

y_true = tf.constant([[0], [-1], [-2], [-3]], dtype=tf.float32)

linear_model = tf.layers.Dense(units=1)

y_pred = linear_model(x)

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

print(sess.run(y_pred))
  • 我注意到输出包含一个数组,该数组包含四个单独的数组,每个数组包含一个值
  • 第一个值始终介于 0 - 1.9999999 之间
  • 第二个数组中的第二个值介于 0 - 3.9999999 之间
  • 第三个数组中的第三个值介于 0 - 5.9999999 之间
  • 第四个数组中的第四个值介于 0 - 6.9999999 之间
<小时/>

我的问题是:

  1. 什么决定了这两个数组的范围输出?
  2. 为什么两者的输出要么全为正,要么全为负?
  3. 为什么两者的输出都按数字顺序排列各自的值?

最佳答案

tf.layers.Dense 计算输入的线性组合并对结果应用激活函数。

由于您将单位定义为 1 并且没有指定激活函数,因此您在第一个示例中得到的是 ax+by+cz+d ,在第二个示例中得到的是 ax+b 。实际上,这是一个带有行的列矩阵,以提高性能。

通常乘数(我提供的示例中的 a、b、c、d)是可以学习的。您的代码不会训练它们。为了正确学习,他们需要从一些合理的值开始(例如 0 不利于学习)。您可以指定自己的初始值设定项。在这种情况下,您使用默认值(根据 docs 的 glorot_uniform_initializer )。

您可以使用tf.trainable_variables()获取所有变量(包括由tf.layers.Dense定义的变量)并评估它们(使用sess .run)来查看它们的值。

关于您的问题:

  1. 什么决定了这两个各自(模型?)的范围输出它是您在 x 中给出的输入与来自默认初始值设定项的随机值之间的点积。

  2. 为什么两者的输出要么全为正,要么全为负?随机的机会。打印变量,运行初始化程序几次,看看它们如何变化。

  3. 为什么两者的输出都按数字顺序排列各自的值?由于您要么偶然获得正权重,要么默认初始化程序更喜欢正权重,因此较高值的线性组合将产生更高的结果。在你的第二个例子中,它应该是相当明显的,因为你替换了 ax+b 中的 1,2,3,4 和 a>0。

关于python - 这两个相似的 TensorFlow 脚本中的输出是如何确定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48782500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com