如何为tf.estimator的input_fn提供额外的目标参数

时间:2018-06-15 00:53:24

标签: python-3.x tensorflow keras deep-learning

如您所知,为了利用tf.estimator,需要实现模型函数构建一个产生批量(特征,标签)对的管道,因此签名应如下所示:

model_fn(features, labels, mode, params, config):

应从input_fn返回这些功能和标签。我们假设功能 - > X和标签 - > y,我在这里遇到问题,因为我有两种类型的标签。(目标,标签)

Features = X : [None, 2048]
Labels = targets: [None, 2048]
         labels: [None, 1] 

为了提供目标和标签作为单独的参数而不仅仅是一个标签参数,可以选择什么?

注意:我尝试连接目标和标签,然后将它们切片到需要的位置,但在执行模型期间又产生了一个额外的问题。因此,我想知道你们是否还有其他更好的想法?

谢谢。

1 个答案:

答案 0 :(得分:0)

input_fn中,您只需返回字典而不是张量作为标签。也就是说,您的输入函数可能会返回元组(features, labels)上的迭代器。 featureslabels都可以是单个张量或dict。这个字典应该从字符串映射到张量。

您可以将数据集准备为返回三个元素(features, targets, labels)的数据集,然后包含一个映射以将目标打包到一个字典中(可能有更好的方法,但这有效):

data = ...  # prepare dataset of 3-tuples

def pack_in_dict(features, targets, labels):
    return features, {"targets": targets, "labels": labels}

data = data.map(pack_in_dict)

现在,如果其中一个元素是dict(比如labels),那么model_fn的相应输入也将是一个dict。然后,您只需在labels["targets"]中使用labels["labels"]model_fn