我试图推动这篇文章: http://ronan.collobert.com/pub/matos/2008_deep_icml.pdf 具体地说是第2节中的方程式(3)。
很快,我想为每个小批量的特性做一个成对距离计算,并将这个损失插入到一般的网络损失中。 我只有批次的Tesnor(16个样本),批次的标签张量和批次特征张量。
找了好一阵子,我还是搞不懂:
1)如何划分正片(即相同标签)和负片对的批次。因为张量不是迭代的,所以我不知道如何得到哪个样本有哪个标签,然后划分向量,或者得到张量的哪些索引属于每个类。
2)如何对批次张量中的某些指标进行成对距离计算?
3)我还需要为反例定义一个新的距离函数
总的来说,我需要得到哪些索引属于哪个类,对所有的正对进行正对距离计算。对所有的负对做另一个计算。然后把这些加起来,加上网络损耗。
任何帮助(三个问题中的一个)都将非常感谢。
(一) 您应该在将数据输入会话之前进行配对采样。为每对标记一个布尔值标签,对于匹配的对来说y=1,否则为0。
2)3)只需计算每对的正/负项,并让0-1标签y选择增加损失的项。
首先创建占位符,y是布尔标签。
然后用该函数生成损失张量。
然后输入数据(例如随机生成的数据):
简短回答
我认为最简单的方法是离线采样(即在TensorFlow图之外) 为一批对及其标签(正或负,即同一类或不同类)创建
tf.placeholder
,然后在TensorFlow中计算相应的损失。代码
batch_size
对输入,并输出batch_size
对形状[batch_size, input_size]
的左元素。您还输出形状[batch_size,]
的成对(正或负)的标签sess.run()
的feed_dict
参数中将先前的输入提供给这些占位符就这样!现在可以通过良好的脱机采样来优化此丢失。
相关问题 更多 >
编程相关推荐