TensorFlow:SKCompat折旧警告

时间:2017-02-25 01:54:00

标签: python machine-learning tensorflow

注意:我的第一个问题就在这里。原谅缺乏细节或信息。如果需要,非常乐意澄清。

我在Mac上运行TensorFlow 1.0.0并且在使用learn.Estimator类时我一直收到此警告

  

警告:tensorflow:从:25:呼叫   fit(来自tensorflow.contrib.learn.python.learn.estimators.estimator)   y被弃用,将在2016-12-01之后删除。   更新说明:Estimator与Scikit Learn分离   接口通过移入单独的类SKCompat。参数x,y和   batch_size仅在SKCompat类中可用,Estimator将   只接受input_fn。示例转换:est = Estimator(...) - >   est = SKCompat(Estimator(...))

我已经尝试过这个课程,并且没有关于它的信息。完整代码发布在这里

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

如果有任何其他人需要的信息,请告诉我

2 个答案:

答案 0 :(得分:5)

您可以从tensorflow.contrib.learn.python导入SKCompat:

from tensorflow.contrib.learn.python import SKCompat

然后使用SKCompat()包装您的估算器,例如像这样:

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

答案 1 :(得分:3)

或者您只是使用updated Estimator API of TensorFlow r1.1

模型定义的API非常相似,仅对参数,返回类型或函数名称进行了一些小的更改。这是我用过的一个例子:

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

你可以使用这个模型,然后像这样:

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

TensorFlow r1.1的输入函数示例可以在我的答案here中找到。