【发布时间】:2020-07-29 16:07:52
【问题描述】:
我正在尝试使用 keras 的双分支神经网络来学习图像和文本的联合嵌入表示。这是我的模型的样子:
这些是我的训练模型的当前输入和输出:
model = Model([txt_input,img_input], [encoded_txt, encoded_img])
我必须使用双向排名损失,这意味着相应文本和图像的表示应该比任何其他图像/文本更接近一个边距 m。这是整个损失函数,有
- s : 相似函数
- D:训练集
- Yi+ :给定图像 xi 的一组相应(正面)文本描述(我的实验中只有一个正面)
- Yi-:给定图像 xi 的一组不对应(负面)描述
- Xi+ : 给定文本描述 yi 的对应(正面)图像集(我的实验中只有一个正面)
- Xi- :给定文本描述 yi 的一组不对应(负)图像
问题在于,为了计算这个损失,我不仅需要知道当前图像的输出和相应的文本表示,还必须计算它们与其他图像/文本表示的相似度。
具体来说,我的问题是: 有没有办法在计算损失时包含整个批次的输出,或者至少包括前 n 个样本的输出?
我看到如何做到这一点的唯一方法是创建一个具有某种状态的损失函数,该状态保留最后 n 个样本的表示,并使用这些来计算相似度。我认为这不是一个好的解决方案,并且想知道是否有更优雅的方式来实现它。我还在研究其他框架,例如 Pytorch,以检查它们是否支持诸如批量损失之类的东西。任何帮助将不胜感激。
谢谢!
PS:我其实是在尝试重现这篇论文的实验:
L. Wang、Y. Li 和 S. Lazebnik,“学习深度结构保持图像-文本嵌入”,IEEE 会议论文集 计算机视觉和模式识别,第 5005-5013 页,2016 年。
图片也是从这篇论文中提取出来的。
【问题讨论】:
标签: python keras loss-function