如您所知,为了利用tf.estimator,需要实现模型函数构建一个产生批量(特征,标签)对的管道,因此签名应如下所示:
model_fn(features, labels, mode, params, config):
应从input_fn返回这些功能和标签。我们假设功能 - > X和标签 - > y,我在这里遇到问题,因为我有两种类型的标签。(目标,标签)
Features = X : [None, 2048]
Labels = targets: [None, 2048]
labels: [None, 1]
为了提供目标和标签作为单独的参数而不仅仅是一个标签参数,可以选择什么?
注意:我尝试连接目标和标签,然后将它们切片到需要的位置,但在执行模型期间又产生了一个额外的问题。因此,我想知道你们是否还有其他更好的想法?
谢谢。
答案 0 :(得分:0)
在input_fn
中,您只需返回字典而不是张量作为标签。也就是说,您的输入函数可能会返回元组(features, labels)
上的迭代器。 features
和labels
都可以是单个张量或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
。