Tensorflow NN具有特定的自定义成本函数

时间:2016-07-06 10:12:12

标签: tensorflow

我正在尝试在张量流中建立一个神经网络,它并不属于回归类别的分类。它可能更接近强化学习。

我创建了一个网络,其中包含一些ReLU隐藏层,这些层以3元素softmax输出层结尾。每个样本的目标向量是奖励(对于惩罚可以是负的,对于中性可以是0)用于做出某种选择(其中有3个)。这个想法是最大化所有样本的总和奖励。

给定一个样本输入映射到模型输出M = [a,b,c],目标Y = [d,e,f];该特定样本的损失将是M * Y',或简单地说是-tf.matmul(model,Y,transpose_b = True)。然而,当使用批处理导致矩阵代替向量时,我不知道如何以TensorFlow的优化器可以使用的方式将其表示为成本函数。简单地使用上面的示例代码就会产生无意义的批量大小^ 2大小的矩阵。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

让我们假设您有一小组N示例的模型输出,称之为output。那将是[N, 1, 3]形状。 (注意:通常情况下,softmax的输出的形状为[N, 3],但您可以使用tf.reshape将其重新整形为[N, 1, 3])。致电您的奖励或定位target,其形状也会[N, 1, 3]。您可以执行以下操作来获取loss形状[N, 1, 1]

loss = tf.batch_matmul(output, tf.transpose(target, [0, 2, 1]))

如果您希望为您的小批量平均损失,您可以执行以下操作:

loss = tf.reduce_mean(loss)

在这种情况下,您会得到一个标量值。