TensorFlow: Advertencia de depreciación de SKCompat

NOTA: Mi primera pregunta aquí. Perdón por la falta de detalles o información. Más que feliz de aclarar si es necesario.

Estoy ejecutando TensorFlow 1.0.0 en Mac y recibo esta advertencia cuando uso la clase learn.Estimator

ADVERTENCIA: tensorflow: Desde: 25: ajuste de llamada (desde tensorflow.contrib.learn.python.learn.estimators.estimator) con y está en desuso y se eliminará después del 2016-12-01. Instrucciones para la actualización: el estimador se desacopla de la interfaz de Scikit Learn al pasar a la clase separada SKCompat. Los argumentos x, y y batch_size solo están disponibles en la clase SKCompat, Estimator solo aceptará input_fn. Ejemplo de conversión: est = Estimador (…) -> est = SKCompat (Estimador (…))

He intentado buscar esta clase y no hay ninguna información al respecto. El código completo está publicado aquí.

https://github.com/austinmwhaley/DeepFarm/blob/master/prototype_1.ipynb

Por favor, avíseme si hay alguna otra información que alguien necesite

Puede importar SKCompat desde tensorflow.contrib.learn.python:

 from tensorflow.contrib.learn.python import SKCompat 

Y luego envuelva su estimador con SKCompat (), por ejemplo, así:

 classifier = SKCompat(tf.contrib.learn.LinearClassifier(args)) 

O simplemente usa la API de Estimator actualizada de TensorFlow r1.1

La API para la definición del modelo es bastante similar con algunos pequeños cambios en los parámetros, solo el tipo de retorno o el nombre de la función. Aquí hay un ejemplo que he usado:

 def model_fn(): def _build_model(features, labels, mode, params): # 1. Configure the model via TensorFlow operations # Connect the first hidden layer to input layer (features) with relu activation y = tf.contrib.layers.fully_connected(features, num_outputs=64, activation_fn=tf.nn.relu, weights_initializer=tf.contrib.layers.xavier_initializer()) y = tf.contrib.layers.fully_connected(y, num_outputs=64, activation_fn=tf.nn.relu, weights_initializer=tf.contrib.layers.xavier_initializer()) y = tf.contrib.layers.fully_connected(y, num_outputs=1, activation_fn=tf.nn.sigmoid, weights_initializer=tf.contrib.layers.xavier_initializer()) predictions = y # 2. Define the loss function for training/evaluation if mode == tf.estimator.ModeKeys.TRAIN or mode == tf.estimator.ModeKeys.EVAL: loss = tf.reduce_mean((predictions - labels) ** 2) else: loss = None if mode != tf.estimator.ModeKeys.PREDICT: eval_metric_ops = { "rmse": tf.metrics.root_mean_squared_error(tf.cast(labels, tf.float32), predictions), "accuracy": tf.metrics.accuracy(tf.cast(labels, tf.float32), predictions), "precision": tf.metrics.precision(tf.cast(labels, tf.float32), predictions) } else: eval_metric_ops = None # 3. Define the training operation/optimizer if mode == tf.estimator.ModeKeys.TRAIN: train_op = tf.contrib.layers.optimize_loss( loss=loss, global_step=tf.contrib.framework.get_global_step(), learning_rate=0.001, optimizer="Adam") else: train_op = None if mode == tf.estimator.ModeKeys.PREDICT: predictions_dict = {"pred": predictions} else: predictions_dict = None # 5. Return predictions/loss/train_op/eval_metric_ops in ModelFnOps object return tf.estimator.EstimatorSpec(mode=mode, predictions=predictions_dict, loss=loss, train_op=train_op, eval_metric_ops=eval_metric_ops) return _build_model 

Y puedes usar este modelo así:

 e = tf.estimator.Estimator(model_fn=model_fn(), params=None) e.train(input_fn=input_fn(), steps=1000) 

Un ejemplo de una función de entrada para TensorFlow r1.1 se puede encontrar en mi respuesta aquí .