TensorFlow - 如何使用多个标签导入数据

时间:2018-06-06 14:45:03

标签: tensorflow tensorflow-datasets

我试图在TensorFlow中创建一个模型,它通过预测数字向量来预测用户的理想项目。 我在Spark中创建了一个数据集,并使用Spark TensorFlow连接器将其保存为TFRecord。 在数据集中,我有几百个功能,每行有20个标签。为了便于操作,我给每一列都添加了一个前缀' feature _'或者'标签_'。 现在我尝试为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
      }
    }
  }
...
}

1 个答案:

答案 0 :(得分:2)

您的解析器功能应与构建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'])

编辑:从评论看来,您似乎将每个功能编码为键,值对,这是不对的。请查看以下答案:Numpy to TFrecords: Is there a more simple way to handle batch inputs from tfrecords?,了解如何以正确的方式编写它。