【问题标题】:how to provide a extra target argument to input_fn of tf.estimator如何为 tf.estimator 的 input_fn 提供额外的目标参数
【发布时间】:2018-06-15 00:53:23
【问题描述】:

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

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

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

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

为了提供目标和标签作为单独的参数而不是一个标签参数,还有什么替代方法?

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    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)
    

    现在,如果其中一个元素是一个字典(例如,labels),那么model_fn 的相应输入也将是一个字典。然后,您可以在您的model_fn 中简单地使用labels["targets"]labels["labels"]

    【讨论】:

    • 谢谢@xdurch0,让我试试看,如果有异常情况在这里更新。
    猜你喜欢
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多