Estoy usando el código del tutorial MNIST:
feature_columns = [tf.contrib.layers.real_valued_column("", dimension=4)] classifier = tf.contrib.learn.DNNClassifier(feature_columns=feature_columns, hidden_units=[10, 20, 10], n_classes=2, model_dir="/tmp/iris_model") classifier.fit(x=np.array(train, dtype = 'float32'), y=np.array(y_tr, dtype = 'int64'), steps=2000) accuracy_score = classifier.evaluate(x=np.array(test, dtype = 'float32'), y=y_test)["auc"] print('AUC: {0:f}'.format(accuracy_score)) from tensorflow.contrib.learn import SKCompat ds_test_ar = np.array(ds_test, dtype = 'float32') ds_predict_tf = classifier.predict(input_fn = _my_predict_data) print('Predictions: {}'.format(str(ds_predict_tf)))
pero al final obtuve el siguiente resultado en lugar de las predicciones:
Predictions: <generator object DNNClassifier.predict.. at 0x000002CE41101CA8>
¿Qué hice mal?
Lo que recibió y guardó en ds_predict_tf
es una expresión generadora. Para imprimirlo puedes hacer:
for i in ds_predict_tf: print i
o
print(list(ds_predict_tf))
Puedes leer más sobre genexpr aquí .
La función de predicción DNNClassifier por defecto tiene as_iterable = True . Así, devuelve un generador. Para obtener valores de predicciones en lugar de generador, pase as_iterable = False en el método classifier.predict.
Por ejemplo,
classifier.predict(input_fn = _my_predict_data,as_iterable=False)
Para entender más sobre los métodos y argumentos del clasificador. Aquí hay una parte de la documentación para el método de predicción.
De la documentación de DNNClassifier :
Args:
Devoluciones:
Lo sentimos, la respuesta es muy fácil, necesita usar el predictor
como objeto generator
:
g1 = ds_predict_tf [g1.__next__() for i in range(100)]
Para estar lo más cerca posible del uso del tutorial:
print('Predictions: {}' .format(list(ds_predict_tf)))
Solución:-
pred = classifier.fit(x=training_set.data, y=training_set.target, steps=2000).predict(test_set.data) print ("Predictions:") print(list(pred))
Eso es…