首页 > 解决方案 > weight_column 值归一化

问题描述

我使用 TensorFlow 罐装估计器从最有利于得分的情况中预测游戏动作(没有“好”或“坏”答案,但根据情况,答案比另一个更好)。这种现实由每个情况/动作样本的分数表示。分数包含在 train_data 中并用作权重,并在估计器中作为权重列传递。

1 ) 我试过没有权重栏:模型适合大约 70% 的答案。该模型对于主要示例是正确的,但对于边缘示例不是最佳的(大约 20 % 剩余......)

2 ) 我尝试使用 weight = exp(-score)。模型拟合约 45%,更好地处理边缘示例,但对主要示例的准确性非常差。

我认为我的体重秤 [0.0001 - 5003.98] 存在问题,最佳结果为 0.0001,价值为 5003.98。规范化它的好方法是什么?

我读了公式 weight = (score - mean(score)) / std(score) 可能是一个解决方案,但似乎不起作用

model = tf.estimator.LinearClassifier(feature_columns=feature_columns,
                                    optimizer=tf.train.AdamOptimizer(learning_rate=0.001, beta1= 0.9,beta2=0.99, epsilon = 1e-08,use_locking=False),
                                    weight_column=weights,
                                    n_classes=10,
                                    label_vocabulary=Action_vocab,
                                    model_dir='./Models/ActionPlayerModel20/',
                                    loss_reduction=tf.losses.Reduction.SUM_OVER_BATCH_SIZE,
                                    config=tf.estimator.RunConfig().replace(save_summary_steps=10))

weight = exp(-score)

标签: pythontensorflownormalizationweighted

解决方案


通过这样做(缩放)解决了重量问题:

 scaledWeight = (weight-weightMin)/(weightMax-weightMin)

它没有完全解决我的问题(更好但不是最佳精度)。所以,我尝试了特征归一化和标准化:归一化准确率高,但过拟合很快;非常好的准确性和缓慢的标准化过拟合。

标准化代码:

    tf.feature_column.numeric_column("Round",dtype=tf.dtypes.float32, normalizer_fn=lambda x: (x - roundMean) / roundStd),


推荐阅读