# TensorFlow dataset API 使用
由于本人感兴趣的是自然语言处理,所以下面有关dataset API 的使用偏向于变长数据的处理。
1. 从迭代器中引入数据
import numpy as np
import tensorflow as tfdef gen():for _ in range(10):sz = np.random.randint(3, 20, 1)[0]yield np.random.randint(1, 100, sz), np.random.randint(0, 10, 1)[0]dataset = tf.data.Dataset.from_generator(gen, (tf.int32, tf.int32)).repeat(2).shuffle(buffer_size=100).padded_batch(3, padded_shapes=([None], []))
iter = dataset.make_one_shot_iterator()
x, y = iter.get_next()with tf.Session() as sess:try:while True:_x, _y = sess.run([x, y])print("x is :\n", _x)print("y is :\n", _y)print("*" * 50)except tf.errors.OutOfRangeError:print("done")finally:pass
输出的结果如下所示,我们可以将X看作是句子,存的是词的ID,Y看作是对句子的分类标签。由于不同句子长度不一样,所以这里使用了0进行填充,使得每个batch内的句子长度一样。
x is :[[41 57 68 84 40 72 98 71 95 50 94 17 78 60 69 29 77][55 44 11 70 39 39 97 86 71 20 0 0 0 0 0 0 0][12 36 75 49 86 0 0 0 0 0 0 0 0 0 0 0 0]]
y is :[4 1 9]
**************************************************
x is :[[59 33 64 47 20 53 93 68 73 57 68 59 34][69 39 12 83 54 11 92 89 60 21 30 30 31][19 32 62 9 66 34 85 86 22 33 19 79 28]]
y is :[8 1 5]
**************************************************
x is :[[47 24 96 38 21 53 78 52 74 15 87 37 21 29 45 61 19 56 73][ 1 24 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0][73 52 14 11 83 77 83 24 34 0 0 0 0 0 0 0 0 0 0]]
y is :[9 4 4]
**************************************************
x is :[[34 21 36 17 90 96 19 3 28 60 87 93 4 41 22 89 70 83 58][70 25 84 42 45 29 40 0 0 0 0 0 0 0 0 0 0 0 0][97 72 19 73 7 9 83 46 72 64 98 13 78 94 66 10 30 46 13]]
y is :[9 9 4]
**************************************************
x is :[[33 27 59 45 79 21 57 17 46 24 67 64 83 95 59 65 7 26 82][84 31 48 91 7 51 14 71 17 40 89 44 25 17 42 13 99 0 0][63 97 45 49 68 70 79 28 90 4 68 77 27 0 0 0 0 0 0]]
y is :[8 1 8]
**************************************************
x is :[[62 19 42 88 3 16 20 38 5 59][99 84 87 10 8 13 0 0 0 0][44 45 45 58 34 53 8 54 0 0]]
y is :[1 1 4]
**************************************************
x is :[[77 51 44 51 2 38 60 46 12 78 20 15 23 57][25 81 23 22 0 0 0 0 0 0 0 0 0 0]]
y is :[4 5]
**************************************************
done