具有特定自定义成本函数的Tensorflow神经网络

具有特定自定义成本函数的Tensorflow神经网络,tensorflow,Tensorflow,我试图在tensorflow中建立一个神经网络,它实际上不属于回归分类。这可能更接近强化学习 我制作了一个带有几个ReLU隐藏层的网络,以3元素softmax输出层结束。每个样本的目标向量是做出某个选择(其中有3个)的奖励(惩罚可以是负数,中立可以是0)。这样做的目的是使所有样本的总回报最大化 给定一个映射到模型输出M=[a,b,c],目标Y=[d,e,f]的样本输入;该特定样本的损失将是M*Y',或者简单地说是-tf.matmul(model,Y,transpose_b=True)。然而,当处

我试图在tensorflow中建立一个神经网络,它实际上不属于回归分类。这可能更接近强化学习

我制作了一个带有几个ReLU隐藏层的网络,以3元素softmax输出层结束。每个样本的目标向量是做出某个选择(其中有3个)的奖励(惩罚可以是负数,中立可以是0)。这样做的目的是使所有样本的总回报最大化

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


我该怎么做呢?

假设您有一小批
N
示例的模型输出,称之为
output
。它的形状是
[N,1,3]
。(注意:通常情况下,softmax的输出将具有形状
[N,3]
,但您可以使用
tf.reformate
将其形状改为
[N,1,3]
)。将您的奖励或目标称为
target
,也会有
[N,1,3]
的形状。您可以执行以下操作以获取具有形状的
损失
[N,1,1]

loss = tf.batch_matmul(output, tf.transpose(target, [0, 2, 1]))
如果您想为您的小批量平均损失,可以执行以下操作:

loss = tf.reduce_mean(loss)
在这种情况下,您会得到一个标量值