来自 Tensorflow TextLineDataset 的 Ngram
Ngrams from Tensorflow TextLineDataset
我有一个文本文件,每行一个句子
当我创建一个 TextLineDataset 并使用迭代器对其进行迭代时,它 returns 文件逐行
我想一次遍历我的文件两个标记,这是我当前的代码:
sentences = tf.data.TextLineDataset("data/train.src")
iterator = sentences.make_initializable_iterator()
next_element = iterator.get_next()
sess = tf.Session()
sess.run(tf.tables_initializer())
sess.run(iterator.initializer)
elem = sess.run(next_element)
print(elem)
是否可以使用 TextLineDataset 来实现?
编辑:"tokens" 我的意思是 "words"
这绝对是可能的,但您需要做一些争论。您需要:
- 将每一行拆分成单词
- 将其扁平化为单个单词流
- 批量为 2 个
我们可以用tf.strings.split
来表示1.:
words = sentences.map(tf.strings.split)
和 flat_map
为 2.:
flat_words = words.flat_map(tf.data.Dataset.from_tensor_slices)
和 batch
为 3:
word_pairs = flat_words.batch(2)
当然,我们可以将所有这些操作链接在一起,得到如下结果:
word_pairs = sentences \
.map(tf.strings.split) \
.flat_map(tf.data.Dataset.from_tensor_slices) \
.batch(2)
我有一个文本文件,每行一个句子
当我创建一个 TextLineDataset 并使用迭代器对其进行迭代时,它 returns 文件逐行
我想一次遍历我的文件两个标记,这是我当前的代码:
sentences = tf.data.TextLineDataset("data/train.src")
iterator = sentences.make_initializable_iterator()
next_element = iterator.get_next()
sess = tf.Session()
sess.run(tf.tables_initializer())
sess.run(iterator.initializer)
elem = sess.run(next_element)
print(elem)
是否可以使用 TextLineDataset 来实现?
编辑:"tokens" 我的意思是 "words"
这绝对是可能的,但您需要做一些争论。您需要:
- 将每一行拆分成单词
- 将其扁平化为单个单词流
- 批量为 2 个
我们可以用tf.strings.split
来表示1.:
words = sentences.map(tf.strings.split)
和 flat_map
为 2.:
flat_words = words.flat_map(tf.data.Dataset.from_tensor_slices)
和 batch
为 3:
word_pairs = flat_words.batch(2)
当然,我们可以将所有这些操作链接在一起,得到如下结果:
word_pairs = sentences \
.map(tf.strings.split) \
.flat_map(tf.data.Dataset.from_tensor_slices) \
.batch(2)