TF框架搭建步骤
1、使用tf.data加载数据。使用输入管道读取训练数据,输入管道使用tf.data创建。利用tf.feature_column描述特征,如分段和特征交叉。
2、使用tf.keras构建、训练并验证模型,或者使用Premade Estimators。
- Keras与TensorFlow的其余部分紧密集成,因此用户可以随时访问TensorFlow的函数。如线性或逻辑回归、梯度上升树、随机森林等也可以直接使用(使用tf.estimatorAPI实现)。 自定义模型时使用, 论文实现
- 如果不想从头开始训练模型,用户也可以很快利用迁移学习来训练使用TensorFlow Hub模块的Keras或Estimator模型。(迁移学习)
3、使用分布式策略进行分布式训练。对于大型机器学习训练任务,分布式策略API可以轻松地在不同硬件配置上分配和训练模型,无需更改模型的定义。由于TensorFlow支持各种硬件加速器,如CPU,GPU和TPU,因此用户可以将训练负载分配到单节点/多加速器以及多节点/多加速器配置上(包括TPU Pod)。
4、导出到Saved Model。 TensorFlow将对Saved Model进行标准化,作为TensorFlow服务的一部分,他将成为TensorFlow Lite、TensorFlow.js、TensorFlow Hub等格式的可互换格式。
tf.data
tf.data
API 在 TensorFlow 中引入了两个新的抽象类:
-
tf.data.Dataset
表示一系列元素,其中每个元素包含一个或多个Tensor
对象。例如,在图像管道中,元素可能是单个训练样本,具有一对表示图像数据和标签的张量。可以通过两种不同的方式来创建数据集:- 创建来源(例如
Dataset.from_tensor_slices()从tensor获取),以通过一个或多个 [
tf.Tensor`](https://www.tensorflow.org/api_docs/python/tf/Tensor)对象构建数据集。 TextLineDataset
– 从文本文件中读取行。TFRecordDataset
– 从 TFRecord 文件中读取记录。FixedLengthRecordDataset
– 从二进制文件中读取具有固定大小的记录。- CsvDataset – 从csv文件中读取。
- 应用转换(例如
Dataset.batch()
),以通过一个或多个tf.data.Dataset
对象构建数据集。 - dataset若用于tf.estimator, 返回迭代器需要格式为 feature字典(列名: 特征), label目标值列,一般通过构建函数来返回训练集 测试集,训练集测试集分两个函数
- 创建来源(例如
-
tf.data.Iterator
提供了从数据集中提取元素的主要方法。Iterator.get_next()
返回的操作会在执行时生成Dataset
的下一个元素,并且此操作通常充当输入管道代码和模型之间的接口。最简单的迭代器是“单次迭代器”,它与特定的Dataset
相关联,并对其进行一次迭代。要实现更复杂的用途,您可以通过Iterator.initializer
操作使用不同的数据集重新初始化和参数化迭代器,这样一来,您就可以在同一个程序中对训练和验证数据进行多次迭代(举例而言)。 -
dataset迭代器.make_one_shot_iterator() 访问数据集中的元素
1234567dataset = tf.data.Dataset.range(100)iterator = dataset.make_one_shot_iterator()next_element = iterator.get_next()for i in range(100):value = sess.run(next_element)print(value) -
Dataset转换
- Dataset.map() – 对数据格式进行转换 dataset1.map(lambda x: …)
- Dataset.batch() – 设置每次返回固定批次的大小
- Dataset.repeat() -指定所有数据重复返回多少遍,若repeat()不传入参数,则所有样本会不停止训练
- Dataset.shuffle(buffer_size= ) – 打乱样本进行返回,buffer_size缓冲区样本数
tf.feature_column 对特征作标识
离散型:
- 分类标识列(tf.feature_column.categorical_column_with_identity): 特征是离散类别:1,2,
3,4,5,输出one-hot编码的稀疏矩阵 - 分类词汇列(tf.feature_column.categorical_column_with_vocabulary_list 或者
tf.feature_column.categorical_column_with_vocabulary_file):(key=’my_feature_b’,
num_buckets= )特征是字符串串词汇,生成ont-hot编码向量 - 经过哈希处理的列(tf.feature_column.categorical_column_with_hash_bucket):不确定类别数量时,对离散的字符串串
直接分桶 - 组合列(tf.feature_column.crossed_column)(‘特征1名称’,‘特征2名称’, hash_bucket_size= 交叉特征列维度过高设置分桶数处理)
数值型:
- 分桶列(tf.feature_column.bucketized_column)(特征,boundaries=[边界列表])连续特征转换成类别特征,进行ont-hot编码,特征与目标值不是线性关系时使用,一般结合组合列使用
- 数值列(tf.feature_column.numeric_column)
- 指标列(tf.feature_column.indicator_column)
- 嵌⼊列(tf.feature_column.embedding_column):embedding columns 不能直接作用在原始特征上,而是作用在categorical columns,对于神经网络在指标列和嵌入列中优先选择嵌入列生成低维实数向量
tf.estimator
TensorFlow 中的 tf.estimator
API 封装了基础的机器学习模型。Estimator 是可扩展性最强且面向生产的 TensorFlow 模型类型。
Estimator 会封装下列操作:
-
实例化
tf.estimator.DNNClassifier
:适用于执行多类别分类的深度模型。tf.estimator.DNNLinearCombinedClassifier
:适用于宽度和深度模型。tf.estimator.LinearClassifier
:适用于基于线性模型的分类器。
-
训练
- classifier.train() 传入参数input_fuc不能携带参数,可以借助functools解决
-
评估
- classifier.evaluate()返回字典格式,包含各种评估指标
-
预测
- classifier.predict()
-
导出以供使用