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'])
编辑:从评论来看,您似乎将每个特征编码为键值对,这是不对的。检查此答案: 了解如何以正确的方式编写它。
我正在尝试在 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'])
编辑:从评论来看,您似乎将每个特征编码为键值对,这是不对的。检查此答案: