Tensorflow:tf.estimator.DNNClassifier是否包含用于训练准确性的摘要?

时间:2018-10-27 02:30:01

标签: python tensorflow machine-learning modeling

我当前正在使用tensorflow内置的DNN分类器(tf.estimator.DNNClassifier)。使模型成功运行,但是当我在张量板上查看汇总标量时,它实际上具有我需要的所有内容,除了训练的准确性。

我到处搜索,但只找到针对定制估计器的解决方案。我想知道这里是否有人能够使用tf.estimator.DNNClassifier获得训练的准确性。

欢迎任何提示或建议。提前致谢。

1 个答案:

答案 0 :(得分:0)

如果您有受过训练的DNNClassifier,则可以使用同一类的内置方法来获得准确性。您可以使用evaluate()方法。只需确保根据评估/测试数据定义输入功能即可。这是一个在随机数据上拟合模型,在更多随机数据上评估模型然后打印评估指标摘要(包括准确性)的示例:

import numpy as np
import tensorflow as tf
import pandas as pd

num = 100000

feat1 = np.random.rand(num,1)
feat2 = np.random.rand(num,1)
label = (np.round(np.random.rand(num,1),0))
Data = pd.DataFrame(np.concatenate((feat1,feat2,label),axis=1), columns=['feat1','feat2','label'])
feature_columns = [
    tf.feature_column.numeric_column(key="feat1"),
    tf.feature_column.numeric_column(key="feat2"),
]

model = tf.estimator.DNNClassifier(feature_columns=feature_columns,hidden_units=[8,8,8,8,8,8,8,8,4,2])

input_train = tf.estimator.inputs.pandas_input_fn(
    x=Data,
    y=Data['label'],
    shuffle=True,
    num_epochs = 1
)

model.train(input_fn=input_train,steps=10000)

feat1T = np.random.rand(num,1)
feat2T = np.random.rand(num,1)
labelT = (np.round(np.random.rand(num,1),0))
DataT = pd.DataFrame(np.concatenate((feat1T,feat2T,labelT),axis=1), columns=['feat1','feat2','label'])

input_eval = tf.estimator.inputs.pandas_input_fn(
    x=DataT,
    y=DataT['label'],
    shuffle=True,
    num_epochs = 1
)

metrics = model.evaluate(input_fn=input_eval, steps=100)

print(metrics)

对于我的随机种子,打印如下:

  

{'accuracy':0.49734375,'accuracy_baseline':0.5026562,'auc':0.5,'auc_precision_recall':0.7486719,'average_loss':0.6931635,'label / mean':0.49734375,'loss':88.72493,'precision ':0.49734375,“预测/平均值”:0.5012483,“调用”:1.0,“全局步骤”:782}