【问题标题】:Tensorflow: Does tf.estimator.DNNClassifier include a summary for training accuracy?Tensorflow:tf.estimator.DNNClassifier 是否包含训练准确性的摘要?
【发布时间】:2018-10-28 11:34:30
【问题描述】:

我目前正在使用 tensorflow 的内置 DNN 分类器 (tf.estimator.DNNClassifier)。让模型成功运行,但是当我在 tensorboard 上查看摘要标量时,它确实拥有我需要的一切,除了训练准确性。

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

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

【问题讨论】:

    标签: python tensorflow machine-learning modeling


    【解决方案1】:

    如果您有训练有素的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.729 ':0.49734375,'预测/平均值':0.5012483,'召回':1.0,'global_step':782}

    【讨论】:

    • 你所说的准确度是测试准确度。我正在寻找训练的准确性。
    • 糟糕。不好意思,朋友。我只是完全误解了这一点。您能否澄清一下:您是在训练时还是在训练完成后寻找准确性?获得训练准确性的一种简单方法是使用 evaluate() 方法,但传递与训练时相同的 input_fn
    • 抱歉回复晚了......您提供的解决方案的问题是不会对测试数据进行评估。我正在尝试查看训练准确度和评估准确度,以防止过度拟合
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 2019-01-30
    • 2020-08-08
    • 2017-10-09
    相关资源
    最近更新 更多