如何除以Tensorflow中的向量大小来计算像MSE这样的平均损失?

时间:2018-05-11 20:28:48

标签: python tensorflow

我有两个float32向量,想要计算均方误差(MSE)。

yvec = tf.placeholder("float32", shape=(None,))
yhatvec = tf.placeholder("float32", shape=(None,))

mse = tf.reduce_sum(tf.square(yhatvec - yvec)) / tf.size(yvec)

compute_mse = lambda vector1, vector2: mse.eval({yhatvec: vector1, yvec: vector2})

compute_mse([0 1 2 3 4], [5 4 3 2 1])

但是tf.size不会返回向量的长度。我收到了一个错误:

Tensor conversion requested dtype float32 for Tensor with dtype int32: 'Tensor("Size_24:0", shape=(), dtype=int32)'

如何获得向量的长度?在python中,我们使用len(vec)

1 个答案:

答案 0 :(得分:1)

fun1 <- function(n) { force(n) fun2 <- function(x) { x^n } return(fun2) } 没问题,但它以整数形式返回结果。在分割之前,您需要转换为浮动,如错误消息

中所述
  

Tensor转换为Dens int32

请求Tensor的dtype float32

所以你可以写

powerfuns <- vector("list", 3)
for (i in 1:3) {
  powerfuns[[i]] <- fun1(i)
}
powerfuns[[2]](4)
# [1] 16
powerfuns[[3]](4)
# [1] 64

或者,使用tf.size计算你的平均值

mse = tf.reduce_sum(tf.square(yhatvec - yvec)) / tf.to_float(tf.size(yvec))

或者,在您的具体情况下,您还可以使用预定义的损失

tf.reduce_mean