TensorFlow:SKCompat弃用警告

6

注意:这是我在这里提出的第一个问题。如果需要,我很乐意澄清。

我在Mac上运行TensorFlow 1.0.0,使用learn.Estimator类时会反复出现警告

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

我尝试查找这个类,但没有任何相关信息。完整代码发布在这里

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

如果还有其他信息需要,请告诉我。


3
当我按照cnn_mnist教程时,遇到类似的问题。根据错误信息,我尝试了像 from tensorflow.contrib.learn.SKCompat import SKCompat 这样的操作,然后使用SKCompat()包装Estimator。但是它没有起作用...错误信息显示:"No module named SKCompat"。我也需要一些帮助! - user3768495
2个回答

5
你可以从tensorflow.contrib.learn.python中导入SKCompat:
from tensorflow.contrib.learn.python import SKCompat

然后将您的估算器用SKCompat()包装,例如:

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

3

或者您可以直接使用TensorFlow r1.1的更新版Estimator API

模型定义的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中,一个输入函数的例子可以在我的回答这里找到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接