Tensorflow,使用逐元素操作定义损失函数的正确方法

时间:2017-11-14 20:27:56

标签: tensorflow loss-function

我有一批 n 培训示例。每个训练样例都给我一个向量 a (长度为k)和向量 c (也是长度为k)。

在tensorflow中,我的输出是 p

我想定义以下损失函数:

\ sum_(i = 0)^(i = n)c_i((a_i - p)^ 2)

我已经阅读了有关我可以使用的各种操作,但似乎无法找到适当的实现。我试图使用tf.tile将p复制到k长度张量并做一个tf.subtract,但这似乎过度了。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

p 的形状是什么? TensorFlow本身支持减去具有不同形状的张量:

import tensorflow as tf

a = tf.Variable([[1, 2, 3], [2, 3, 4], [3, 4, 5]])

x_1 = a - tf.Variable([1, 1, 1])
x_2 = a - tf.Variable([1])
x_3 = a - tf.Variable(1)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(x_1))  # [[0, 1, 2], [1, 2, 3] [2, 3, 4]]
    print(sess.run(x_2))  # [[0, 1, 2], [1, 2, 3] [2, 3, 4]]
    print(sess.run(x_3))  # [[0, 1, 2], [1, 2, 3] [2, 3, 4]]

您可以按如下方式定义损失函数:

a = tf.Variable([[1, 2, 3], [2, 3, 4], [3, 4, 5]])
c = tf.Variable([[4, 5, 6], [5, 6, 7], [6, 7, 8]])

p = tf.Variable(1)

loss_1 = tf.reduce_mean(tf.reduce_sum(tf.multiply(c, tf.pow(tf.subtract(a, p), 2)), axis=1))  # 112
loss_2 = tf.reduce_mean(tf.reduce_sum(c * (a-p)**2, axis=1))  # 112