我当前正在使用tensorflow内置的DNN分类器(tf.estimator.DNNClassifier
)。使模型成功运行,但是当我在张量板上查看汇总标量时,它实际上具有我需要的所有内容,除了训练的准确性。
我到处搜索,但只找到针对定制估计器的解决方案。我想知道这里是否有人能够使用tf.estimator.DNNClassifier
获得训练的准确性。
欢迎任何提示或建议。提前致谢。
答案 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}