如何规范TensorFlow中的功能?

点击上方关注,All in AI中国

如何规范TensorFlow中的功能?

TL;DR

使用tf.estimator时,请使用tf.feature_column.numeric_feature中的normalizer_fn参数,使用相同的参数(mean,std等)进行标准化,以进行训练、评估和服务。

如何规范TensorFlow中的功能?

tf.estimator API的规范化

神经网络激活通常像它们的输入一样被标准化。规范化网络中节点的输入有助于防止所谓的消失(和爆炸)梯度。批量标准化是最全面的标准化方法,但它会产生额外的成本,也可能会产生过高的代价。因此,您可能只想将输入标准化。

使用tf.estimator API(这是构建TensorFlow模型的最简单方法)时,有两种方法可以规范化输入:在input_fn内部和创建feature_column时。我将向您展示一个执行梯形图的示例,然后我将向您展示使用ML Engine训练多个模型。

Boilerplate代码:使用`normalizer_fn`参数进行标准化

在input_fn内部进行规范化可以提供更大的灵活性(您也可以在此处执行特征工程),但我发现使用带有tf.feature_column.numeric_column的normalizer_fn更加优雅。这是一个基本的例子:

如何规范TensorFlow中的功能?

下面,我将展示一个端到端的示例,以获取规范化参数,然后对数据集中的所有数字列进行规范。

你应该在训练集上提前计算标准化参数。 在这种情况下,使用Pandas来获取每个数字列的均值和标准差:

如何规范TensorFlow中的功能?

或者,TensorFlow Transform提供了一种可扩展的输入标准化方法,特别适用于较大的数据集。看看这里的例子。

运行上面的操作后,我们返回每列的参数:

如何规范TensorFlow中的功能?

现在,您可以使用上面计算的训练方法和标准差来创建要素列。

如何规范TensorFlow中的功能?

如何规范TensorFlow中的功能?

最后,您可以使用功能列构建评估器:

如何规范TensorFlow中的功能?

使用ML Engine在云中训练多个模型

归一化是一个超参数,在实践中,评估不同的归一化方案会很有用。例如,您可能希望尝试训练模型,它只是规范化您的特性,并将它与使用批处理规范化对隐藏层的规范化输入进行比较。

您可以使用Cloud ML Engine并行启动多个实验。这对于您希望利用云来扩展模型训练的大型数据集尤其有用。要使用ML Engine进行训练,您需要打包模型代码,创建task.py和model.py模型文件。请参阅repo以获取示例。

最好先在本地测试模型包,以确保没有语法或语义错误:

如何规范TensorFlow中的功能?

之后,您可以使用`gcloud ml-engine jobs submit training`向ML 机器提交:

如何规范TensorFlow中的功能?

在我的情况下,训练有和没有计算功能的z得分:

如何规范TensorFlow中的功能?

正如预期的那样,对输入进行标准化可以改善最终的模型性能。

如何规范TensorFlow中的功能?

运营:李佳惠


分享到:


相關文章: