TensorFlow - 如何导入带有多个标签的数据

TensorFlow - how to import data with multiple labels

我正在尝试在 TensorFlow 中创建一个模型,该模型通过预测数字向量来预测用户的理想项目。 我在 Spark 中创建了一个数据集,并使用 Spark TensorFlow 连接器将其保存为 TFRecord。 在数据集中,每行有数百个特征和 20 个标签。为了便于操作,我给每一列都添加了前缀 'feature_' 或 'label_'。 现在我正在尝试为 TensorFlow 编写输入函数,但我不知道如何解析数据。 到目前为止我已经写了这个:

def dataset_input_fn():
    path = ['data.tfrecord']
    dataset = tf.data.TFRecordDataset(path)
    def parser(record):
        example = tf.train.Example()
        example.ParseFromString(record)

        # TODO: no idea what to do here
        # features = parsed["features"]
        # label = parsed["label"]

        # return features, label

    dataset = dataset.map(parser)
    dataset = dataset.shuffle(buffer_size=10000)
    dataset = dataset.batch(32)
    dataset = dataset.repeat(100)
    iterator = dataset.make_one_shot_iterator()

    features, labels = iterator.get_next()
    return features, labels

如何将示例拆分为特征集和标签集?我试图将示例分成两部分,但甚至无法访问它。我设法访问它的唯一方法是打印示例,这给了我这样的东西。

features {
...
  feature {
    key: "feature_wishlist_hour"
    value {
      int64_list {
        value: 0
      }
    }
  }
  feature {
    key: "label_emb_1"
    value {
      float_list {
        value: 0.4
      }
    }
  }
  feature {
    key: "label_emb_2"
    value {
      float_list {
        value: 0.8
      }
    }
  }
...
}

您的解析器函数应该类似于您构造 example proto 的方式。在您的情况下,它应该类似于:

# example proto decode
def parser(example_proto):
   keys_to_features = {'feature_wishlist_hour':tf.FixedLenFeature((), tf.int64),
                    'label_emb_1': tf.FixedLenFeature((), tf.float32),
                    'label_emb_2': tf.FixedLenFeature((), tf.float32)}

   parsed_features = tf.parse_single_example(example_proto, keys_to_features)
   return parsed_features['feature_wishlist_hour'], (parsed_features['label_emb_1'], parsed_features['label_emb_2'])

编辑:从评论来看,您似乎将每个特征编码为键值对,这是不对的。检查此答案: 了解如何以正确的方式编写它。