【问题标题】:Variable size multi-label candidate sampling in tensorflow?张量流中的可变大小多标签候选采样?
【发布时间】:2017-09-06 22:55:05
【问题描述】:

nce_loss() 请求 num_true 的静态 int 值。这适用于每个训练示例具有相同数量的标签并且我们提前知道的问题。

当标签具有可变形状[None],并且使用.padded_batch() + .group_by_window() 按桶大小进行批处理和/或分桶时,需要提供可变大小num_true 以适应所有训练示例.据我所知,这目前不受支持(如果我错了,请纠正我)。

换句话说,假设我们有一个图像数据集,每个图像有任意数量的标签(狗、猫、鸭子等),或者有一个文本数据集,每个句子有多个类(class_1、class_2、.. ., 类_n)。类不是相互排斥的,并且示例之间的大小可能会有所不同。 但是由于可能的标签数量可能很大,10k-100k 有没有办法通过采样损失来提高性能(与 sigmoid_cross_entropy 相比)?

是否有适当的方法来执行此操作或任何其他解决方法?

nce_loss = tf.nn.nce_loss(
    weights=nce_weights,
    biases=nce_biases,
    labels=labels,
    inputs=inputs,
    num_sampled=num_sampled,
    # Something like this: 
    # `num_true=(tf.shape(labels)[-1])` instead of `num_true=const_int`
    # , would be preferable here
    num_classes=self.num_classes)

【问题讨论】:

  • 嗨,MtDersvan,你找到这个问题的答案了吗?
  • @michal 来自官方页面tensorflow.org/api_docs/python/tf/nn/nce_loss 我们可以看到以下内容:Note: It would be useful to allow a variable number of target classes per example. We hope to provide this functionality in a future release. For now, if you have a variable number of target classes, you can pad them out to a constant number by either repeating them or by padding with an otherwise unused class. 同时,我在github.com/tensorflow/tensorflow/pull/14928 做了一个部分工作的 PR。

标签: tensorflow multilabel-classification


【解决方案1】:

我看到两个问题: 1)使用不同数量的真值的NCE; 2) 不互斥的类。

正如@michal 所说,对于第一个问题,预计将来会包含此功能。我尝试了几乎相同的事情:使用带有shape=(None, None) 的标签,即true_values 维度Nonesampled_values 参数有同样的问题:true_values 数字必须是固定整数。建议的解决方法是使用一个代表<PAD> 的类(0 是最好的)并完成true_values 的数量。在我的例子中,0 是一个代表<PAD> 的特殊标记。部分代码在这里:

assert len(labels) <= (window_size * 2)
zeros = ((window_size * 2) - len(labels)) * [0]
labels = labels + zeros
labels.sort()

我对标签进行排序是因为考虑了另一个建议:

注意:默认情况下,这使用对数均匀 (Zipfian) 分布 抽样,因此您的标签必须按降序排序 频率达到良好的效果。

在我的例子中,特殊标记和更频繁的词具有较低的索引,否则,不太频繁的词具有更高的索引。我同时包含了与输入相关的所有标签类,并以零完成,直到 true_values 数字。当然,最后你必须忽略0 类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-29
    • 2019-01-06
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多