估算器:准确度预测中占位符的用途是什么?

时间:2017-12-13 14:23:26

标签: python machine-learning tensorflow deep-learning classification

我在TensorFlow中使用DNNClassifierLinearClassifier(使用两个不同的模型进行比较)对我的数据集进行二元分类。我已经成功地使两种模型都能运作并输出有关准确度的指标。但是,我想要的是能够获得某种类型的数组,其中包含模型在测试中所做的所有预测。理想情况下,这些预测也会有一些与之相关的概率。

在StackOverflow和TensorFlow GitHub页面上搜索引导我使用这些代码行来提取预测:

sess = tf.Session()
sess.run(tf.global_variables_initializer())
sess.run(results, feed_dict={?})

唯一的问题是我不知道在feed_dict放什么。这个问题的大多数其他人似乎都没有使用预制的估算器,因此我很困惑在哪里找到他们在我自己的代码中放入feed_dict的内容。我尝试使用我在test_input_fn方法中添加的内容,但我得到了TypeError。我的代码的其他一些关键部分如下所示:

def get_features(array):
    return {'policy_state': np.array(array[:, 2], dtype=str),
       'tiv': np.array(array[:, 4], dtype=int),
       'veh_count': np.array(array[:, 5], dtype=int),
       'generation': np.array(array[:, 8], dtype=str),
       'modern_classic_ind': np.array(array[:, 17], dtype=str),
       'h_plus_ind': np.array(array[:, 7], dtype=str)}

train_input_fn = tf.estimator.inputs.numpy_input_fn(
    x=get_features(my_data),
    y=np.array(np.array(my_data[:, 11], dtype=int)),
    num_epochs=None,
    shuffle=True)

test_input_fn = tf.estimator.inputs.numpy_input_fn(
    x=get_features(test_data),
    y=np.array(np.array(test_data[:, 11], dtype=int)),
    num_epochs=None,
    shuffle=True)

我很乐意在必要时提供额外的代码/信息

3 个答案:

答案 0 :(得分:2)

使用tf.estimator.Estimator.predict方法,该方法返回预测结果的生成器。例如:

predict_input_fn = tf.estimator.inputs.numpy_input_fn({"x": x_test},
                                                      batch_size=batch_size,
                                                      num_epochs=1,
                                                      shuffle=False)

predictions = estimator.predict(input_fn=predict_input_fn)
for prediction in predictions:
  print(prediction)

注意num_epochs=1shuffle=False以使结果稳定。

答案 1 :(得分:1)

Estimator API自行管理tf.Graphtf.Session,它使用input_fn为所有相关操作提供值。无需启动tf.Session

训练你的模特:

est = tf.estimator.DNNClassifier(...)
est.train(input_fn=train_input_fn)

预测:

predictions = est.predict(input_fn=test_input_fn)

答案 2 :(得分:0)

您应该为所有tf.placeholders提供numpy数组。

inputs = tf.placeholder(tf.float, shape=[None,10])
weights = ... (define some weights)
results = tf.matmul(inputs, weights)
feed_in={inputs: np.zeros((1,10))}