我正在训练类似于mnist的数据集
系统:MacOS
Tensorflow版本:1.13.1(来自Anaconda)
x_train
,x_test
,y_train
,y_test
是已经存在的熊猫数据框
我的代码:
import tensorflow as tf
feature_columns = [tf.feature_column.numeric_column("x", shape=[28 * 28])]
# DNN model for training
dnn_clf=tf.estimator.DNNClassifier(feature_columns=feature_columns,
hidden_units=[300,100,20],
n_classes=10)
input_fn = tf.estimator.inputs.numpy_input_fn(
x={"x": x_train.values}, y=y_train.values, num_epochs=5, batch_size=50, shuffle=True)
# Train the training set
dnn_clf.train(input_fn=input_fn)
# Predict the test set
pred_test=dnn_clf.predict(x_test.values)
print(list(pred_test))
我需要这些预测值而不是本教程中的dnn_clf.evaluate
函数,因为我想对该模型进行混淆。
该错误发生在最后一行,部分错误消息如以下屏幕截图所示:
我得到的最后错误消息是:
TypeError: unsupported callable
那么如何在Tensorflow的DNNClassifier
中正确获得预测值?
答案 0 :(得分:0)
该错误发生在上述代码的“预测”部分,应该为:
test_value = tf.estimator.inputs.numpy_input_fn(
x={"x": x_test}, y=None, batch_size=50, shuffle=True)
pred_test=dnn_clf.predict(input_fn=test_value)
它返回生成器而不是列表
所以获取预测值的方法是(也许不够正确,如果有什么问题,请告诉我)
1。将生成器转换为列表
pred_info=list(pred_test)
2。此列表中的每个元素如下所示:
{'logits': array([ -0.88073593, -7.3466268 , 3.0595555 , 0.8544391 ,
6.690731 , -12.812279 , 7.951861 , -15.16283 ,
-0.11098857, -12.9959545 ], dtype=float32),
'probabilities': array([1.12913796e-04, 1.75649234e-07, 5.80756133e-03, 6.40212209e-04,
2.19277114e-01, 7.42923278e-10, 7.73918152e-01, 7.08128972e-11,
2.43805902e-04, 6.18264884e-10], dtype=float32),
'class_ids': array([6]),
'classes': array([b'6'], dtype=object)}
'class_ids'是我们想要的
此列表中的每个元素都是字典
像这样对列表中的每个元素使用dict_item_want.get()方法
dnn_test=[]
for i in pred_info:
dnn_test.append(int(i.get('class_ids')))
print('the first 10 predictions from DNNClassifier are:')
您可以获得列表
3。将混淆矩阵应用于此列表和测试集中的y值