【问题标题】:Tensorflow Multiple Input Loss FunctionTensorFlow 多输入损失函数
【发布时间】:2018-01-09 11:20:32
【问题描述】:

我正在尝试在 Tensorflow 中实现一个 CNN(与 VGG 非常相似的架构),然后在第一个全连接层之后分成两个分支。它遵循这篇论文:https://arxiv.org/abs/1612.01697

网络的两个分支中的每一个都输出一组 32 个数字。我想写一个联合损失函数,它需要 3 个输入:

  1. 分支 1 (y) 的预测
  2. 分支 2 (alpha) 的预测
  3. 标签 Y(基本事实)(q)

并计算加权损失,如下图所示:

Loss function definition

q_hat = tf.divide(tf.reduce_sum(tf.multiply(alpha, y),0), tf.reduce_sum(alpha,0))
loss  = tf.abs(tf.subtract(q_hat, q))

我明白我需要使用 tf 函数来实现这个损失函数。实现了上述功能后,网络正在训练,但一旦训练,它并没有输出预期的结果。

有没有人尝试过将网络的两个分支的输出组合到一个联合损失函数中?这是 TensorFlow 支持的吗?也许我在这里的某个地方犯了一个错误?任何帮助将不胜感激。如果您希望我添加更多详细信息,请告诉我。

【问题讨论】:

  • “没有输出预期的结果”是什么意思?
  • 一旦在相同的数据集上训练并使用与论文相同的方法,我的结果就会不同。具体来说,加权分支不会学到太多,因为它输出零。我很想看到一些用 TF 编写的类似的 2 分支损失函数的例子。在昨晚调整成本函数后,我今天得到了一些更好的结果。将保持更新。

标签: function tensorflow loss


【解决方案1】:

从 TensorFlow 的角度来看,“常规”CNN 图和“分支”图之间绝对没有区别。对于 TensorFlow,它只是一个需要执行的图。所以,TensorFlow 肯定支持这一点。 “将两个分支合并为联合损失”也没什么特别的。事实上,损失取决于两个分支是“好的”。这意味着当您要求 TensorFlow 计算损失时,它必须通过两个分支进行前向传递,这正是您想要的。

我注意到的一件事是您的损失代码与图像不同。您的代码似乎可以做到这一点https://ibb.co/kbEH95

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 2020-12-04
    • 2019-02-03
    • 1970-01-01
    • 2019-01-13
    • 2020-06-05
    • 1970-01-01
    • 2018-12-20
    • 2019-01-20
    相关资源
    最近更新 更多