我正在尝试在张量流中建立一个神经网络,它并不属于回归类别的分类。它可能更接近强化学习。
我创建了一个网络,其中包含一些ReLU隐藏层,这些层以3元素softmax输出层结尾。每个样本的目标向量是奖励(对于惩罚可以是负的,对于中性可以是0)用于做出某种选择(其中有3个)。这个想法是最大化所有样本的总和奖励。
给定一个样本输入映射到模型输出M = [a,b,c],目标Y = [d,e,f];该特定样本的损失将是M * Y',或简单地说是-tf.matmul(model,Y,transpose_b = True)。然而,当使用批处理导致矩阵代替向量时,我不知道如何以TensorFlow的优化器可以使用的方式将其表示为成本函数。简单地使用上面的示例代码就会产生无意义的批量大小^ 2大小的矩阵。
我该怎么做?
答案 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)
在这种情况下,您会得到一个标量值。