看一下测试示例:
import tensorflow as tf
x = tf.constant([[1,2],[3,4],[5,6]])
mean, variance = tf.nn.moments(x, [0])
with tf.Session() as sess:
m, v = sess.run([mean, variance])
print(m, v)
Run Code Online (Sandbox Code Playgroud)
输出为:
[3 4]
[2 2]
Run Code Online (Sandbox Code Playgroud)
我们要计算沿轴0的方差,第一列是[1,3,5],并且均值=(1 + 3 + 5)/ 3 = 3,是的,方差= [(1-3) ^ 2 +(3-3)^ 2 +(5-3)^ 2] /3=2.6666,但输出为2,谁能告诉我如何tf.nn.moments 计算方差?
顺便说一下,查看API DOC,该怎么shift办?
问题是x整数张量和TensorFlow而不是强制转换,而是在不更改类型的情况下尽可能好地执行了计算(因此输出也是整数)。您可以在的构造中传递浮点数,x或指定的dtype参数tf.constant:
x = tf.constant([[1,2],[3,4],[5,6]], dtype=tf.float32)
Run Code Online (Sandbox Code Playgroud)
然后,您将获得预期的结果:
import tensorflow as tf
x = tf.constant([[1,2],[3,4],[5,6]], dtype=tf.float32)
mean, variance = tf.nn.moments(x, [0])
with tf.Session() as sess:
m, v = sess.run([mean, variance])
print(m, v)
>>> [ 3. 4.] [ 2.66666675 2.66666675]
Run Code Online (Sandbox Code Playgroud)
关于该shift参数,似乎可以指定一个值来“移位”输入。移位表示减法,因此,如果输入为[1., 2., 4.]且给出a shift的值2.5,则TensorFlow首先会减去该值并计算的弯矩[-1.5, 0.5, 1.5]。通常,将其保留为似乎是安全的None,它将通过输入的均值执行平移,但是我想可能会给出预定的平移值(例如,如果您知道或对均值有一个大概的想法)的输入)可能会产生更好的数值稳定性。
| 归档时间: |
|
| 查看次数: |
5299 次 |
| 最近记录: |