tf.data.TFRecordDataset(
filenames,
compression_type=None,
buffer_size=None,
num_parallel_reads=None,
name=None
)
filename = 'part-r-1.gz'
data = tf.data.TFRecordDataset(filename, compression_type='GZIP',buffer_size=4 * 10)
def _parse(example_proto):
# feature_spec是tfrecord的数据格式的定义,字典结构{k(特征名):v(数据结构)}
features = tf.io.parse_example(example_proto, feature_spec)
return features
# num_parallel_calls表示要并行异步处理的数字元素。 如果未指定,则将按顺序处理元素。 如果使用值tf.data.experimental.AUTOTUNE ,则根据可用CPU动态设置并行调用的数量。
data = data.map(_parse, num_parallel_calls=4)
print(data)
Dataset.map 方法,对该数据集对象中的每一个序列化的 tf.train.Example 字符串执行 tf.io.parse_single_example 函数,从而实现反序列化。
tf.nn.embedding_lookup(params, ids, partition_strategy='mod', max_norm=None)
#目的是按照ids从params这个矩阵中拿向量(行),所以ids就是这个矩阵索引(行号),需要int类型。
import tensorflow as tf;
import numpy as np;
c = np.random.random([10,1])
b = tf.nn.embedding_lookup(c, [1, 3])
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
print sess.run(b)
print c
[[ 0.77505197] [ 0.20635818]]
[[ 0.23976515],[ 0.77505197],[ 0.08798201],[ 0.20635818],[ 0.37183035]
,[ 0.24753178],[ 0.17718483],[ 0.38533808],[ 0.93345168],[ 0.02634772]]
分析:输出张量c的第一和第三个元素。