No se pueden obtener predicciones de tensorflow DNNClassifier

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 :

Predecir

Args:

  • x: características.
  • input_fn: Función de entrada. Si se establece, x debe ser None.
  • batch_size: sobrescribe el tamaño de lote predeterminado.
  • salidas: lista de str, nombre de la salida a predecir. Si Ninguno, devuelve clases.
  • as_iterable: Si es verdadero, devuelva un iterable que continúe produciendo predicciones para cada ejemplo hasta que se agoten las entradas. Nota: las entradas deben terminar si desea que termine el iterable (por ejemplo, asegúrese de pasar num_epochs = 1 si está usando algo como read_batch_features).

Devoluciones:

  • Numpy array de clases predichas con forma [batch_size] ( o un iterable de clases predichas si as_iterable es True ). Cada clase predicha está representada por su índice de clase (es decir, un entero de 0 a n_classes-1). Si se establece salidas, devuelve un dict de predicciones.

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…