关键词:
- tf.contrib.data.parallel_interleave
- tf.data.TFRecordDataset
- input_layer
- make_initializable_iterator()
- train.MonitoredTrainingSession
- test_op.initializer
- parse_example
- data.Dataset.list_files
- data.experimental.make_batched_features_dataset
- data.Dataset.from_tensor_slices
- compat.v1.data.make_one_shot_iterator
- feature_column.shared_embeddings
- shared_embedding_columns_v2
一、使用feature_column.inpout_layer做特征工程
---------TensorFlow1.x---------
1、使用parse_example方式
1.1、在自定义tfrecord数据解析函数中使用
# 注意:使用的是批处理tf.parse_example而不是tf.parse_single_example
def parse_exmp(serial_exmp):
oriExample = tf.parse_example(serial_exmp,features={'user_data':tf.FixedLenFeature([43], tf.float32)})
oriAllData = oriExample.get("user_data")
feaDics=dict()
retainLabel = oriAllData[:,0:1]
feaDics["sta_fea1"]=oriAllData[:,1:18]
feaDics["click_level"]=tf.cast(oriAllData[:,18:19],dtype=tf.int64)
rs = tf.feature_column.input_layer(features=feaDics,feature_columns=get_feature_columns_new())
return rs
1.2、读取tfrecord数据集并做特征处理
# train_files是tfrecord文件列表
# 注意:batch()和prefetch()是必须的
input_files = tf.data.Dataset.list_files(train_files)
dataset = input_files.apply(tf.contrib.data.parallel_interleave(tf.data.TFRecordDataset,cycle_length=reader_num_threads)).batch(10).prefetch(5)
dataset = dataset.map(parse_exmp,num_parallel_calls=8)
1.3、输出处理结果
test_op = dataset.make_initializable_iterator()
one_element = test_op.get_next()
with tf.train.MonitoredTrainingSession() as sess:
sess.run(test_op.initializer)
print(sess.run(one_element))
2、使用make_batched_features_dataset自动解析tfrecord数据方式
2.1、在自定义tfrecord数据解析函数中使用
def parse_exmp_batched(serial_exmp):
oriAllData = serial_exmp.get("user_data")
feaDics=dict()
retainLabel = oriAllData[:,0:1]