从 Tensorflow 数据集中提取特征和标签
Extract features and labels from a Tensorflow Dataset
我有一个 TextLineDataset,它从文本文件中读取行。
此数据集读取文件并 returns 以滑动 window 方式读取文件,例如,如果我的文本文件包含:
I am going to school
School is far from home
我的数据集returns:
I am going
am going to
going to school
...
(假设我一次要3个词,每一步从一个词滑出)
我很高兴。
但现在我想,对于数据集返回的每个句子,提取前 2 个词并说它们是我的特征,并提取最后一个词并说这是我的标签
当然我希望它成为计算图的一部分(就像我的数据集)而不是在 运行 时间
这是我的代码:
sentences = tf.data.TextLineDataset("data/train.src")
words = sentences.map(lambda string: tf.string_split([string]).values)
flat_words = words.flat_map(tf.data.Dataset.from_tensor_slices)
flat_words = flat_words.window(3, 1, 1, True).flat_map(lambda x: x.batch(3)).batch(4)
iterator = flat_words.make_initializable_iterator()
next_element = iterator.get_next()
sess = tf.Session()
sess.run(tf.tables_initializer())
sess.run(iterator.initializer)
print(sess.run(next_element))
提前致谢
您可以再插入一个映射函数。像这样的东西会将除最后一个词以外的所有词映射为一组特征,并将最后一个词映射为标签:
def map_to_feats_and_lbl(x):
return x[:-1], x[-1]
我们可以这样插入:
flat_words = flat_words \
.window(3, 1, 1, True) \
.flat_map(lambda x: x.batch(3)) \
.map(map_to_feats_and_lbl) \
.batch(4)
并以与您已经在做的类似的方式使用:
iterator = flat_words.make_initializable_iterator()
feats, label = iterator.get_next()
sess = tf.Session()
sess.run(tf.tables_initializer())
sess.run(iterator.initializer)
feat_val, label_val = sess.run([feats, label])
print (feat_val)
print (label_val)
我有一个 TextLineDataset,它从文本文件中读取行。
此数据集读取文件并 returns 以滑动 window 方式读取文件,例如,如果我的文本文件包含:
I am going to school
School is far from home
我的数据集returns:
I am going
am going to
going to school
...
(假设我一次要3个词,每一步从一个词滑出)
我很高兴。
但现在我想,对于数据集返回的每个句子,提取前 2 个词并说它们是我的特征,并提取最后一个词并说这是我的标签
当然我希望它成为计算图的一部分(就像我的数据集)而不是在 运行 时间
这是我的代码:
sentences = tf.data.TextLineDataset("data/train.src")
words = sentences.map(lambda string: tf.string_split([string]).values)
flat_words = words.flat_map(tf.data.Dataset.from_tensor_slices)
flat_words = flat_words.window(3, 1, 1, True).flat_map(lambda x: x.batch(3)).batch(4)
iterator = flat_words.make_initializable_iterator()
next_element = iterator.get_next()
sess = tf.Session()
sess.run(tf.tables_initializer())
sess.run(iterator.initializer)
print(sess.run(next_element))
提前致谢
您可以再插入一个映射函数。像这样的东西会将除最后一个词以外的所有词映射为一组特征,并将最后一个词映射为标签:
def map_to_feats_and_lbl(x):
return x[:-1], x[-1]
我们可以这样插入:
flat_words = flat_words \
.window(3, 1, 1, True) \
.flat_map(lambda x: x.batch(3)) \
.map(map_to_feats_and_lbl) \
.batch(4)
并以与您已经在做的类似的方式使用:
iterator = flat_words.make_initializable_iterator()
feats, label = iterator.get_next()
sess = tf.Session()
sess.run(tf.tables_initializer())
sess.run(iterator.initializer)
feat_val, label_val = sess.run([feats, label])
print (feat_val)
print (label_val)