如何规范TensorFlow中的功能?
点击上方关注,All in AI中国
TL;DR
使用tf.estimator时,请使用tf.feature_column.numeric_feature中的normalizer_fn参数,使用相同的参数(mean,std等)进行标准化,以进行训练、评估和服务。
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更加优雅。这是一个基本的例子:
下面,我将展示一个端到端的示例,以获取规范化参数,然后对数据集中的所有数字列进行规范。
你应该在训练集上提前计算标准化参数。 在这种情况下,使用Pandas来获取每个数字列的均值和标准差:
或者,TensorFlow Transform提供了一种可扩展的输入标准化方法,特别适用于较大的数据集。看看这里的例子。
运行上面的操作后,我们返回每列的参数:
现在,您可以使用上面计算的训练方法和标准差来创建要素列。
最后,您可以使用功能列构建评估器:
使用ML Engine在云中训练多个模型
归一化是一个超参数,在实践中,评估不同的归一化方案会很有用。例如,您可能希望尝试训练模型,它只是规范化您的特性,并将它与使用批处理规范化对隐藏层的规范化输入进行比较。
您可以使用Cloud ML Engine并行启动多个实验。这对于您希望利用云来扩展模型训练的大型数据集尤其有用。要使用ML Engine进行训练,您需要打包模型代码,创建task.py和model.py模型文件。请参阅repo以获取示例。
最好先在本地测试模型包,以确保没有语法或语义错误:
之后,您可以使用`gcloud ml-engine jobs submit training`向ML 机器提交:
在我的情况下,训练有和没有计算功能的z得分:
正如预期的那样,对输入进行标准化可以改善最终的模型性能。
运营:李佳惠
感谢您对AI中国的关注,如有转载、投稿或商务合作请私信小编或点击了解更多获取联系邮箱