预测不会以Tensorflow结尾

时间:2017-08-01 10:06:39

标签: python tensorflow google-cloud-platform prediction

我使用Tensorflow框架编写了一个神经网络,但是当我尝试做一些预测时,程序并没有结束。

该程序包含大量文件,我将尝试在这里发布主要文件,但简而言之,我有一个自定义模型函数和一个实验者来训练和评估它。

我必须使用Experimenter API,因为程序需要在本地和云端运行,但在第一种情况下,我不想使用Tensorflow服务来运行我的预测。

注意: 该项目类似于您可以在this address找到的Google Cloud Platform示例

我的模型功能

def generate_model_fn(...):

    def _model_fn(features, labels, mode):

        # Pop the name of the signal.
        if 'FN' in features:
            names = features.pop('FN')

        if 'FT' in features:
            labels = features.pop('FT')

        columns = [layers.real_valued_column(key) for key, value in features.items()]
        inputs = layers.input_from_feature_columns(features, columns)

        hidden_layers = None

        # Iterate all over the hidden units.
        for unit in hidden_units:
            hidden_layers = tf.layers.dense(
                inputs=inputs if hidden_layers is None else hidden_layers,
                activation=tf.nn.relu,
                units=unit,
            )

        dropout_layer = layers.dropout(inputs=hidden_layers,keep_prob=1.0 - dropout)
        logits = tf.layers.dense(inputs=dropout_layer, activation=None, units=2)


        if mode in (ModeKeys.PREDICT, ModeKeys.EVAL):

            probabilities = tf.nn.softmax(logits)
            predictions = tf.argmax(logits, 1)

        if mode == ModeKeys.PREDICT:

            predictions = {
                'classes': predictions,
                'scores': probabilities,
            }

            export_outputs = {
                'prediction': tf.estimator.export.PredictOutput(predictions)
            }

            return tf.estimator.EstimatorSpec(
                mode=mode,
                predictions=predictions,
                export_outputs=export_outputs
            )

return _model_fn

实验者

def generate_experimenter_fn(**args):

    def _experimenter_fn(run_config, hparams):

        training_fn = lambda: generate_input_fn(...)
        evaluating_fn = lambda: generate_input_fn(...)

        return learn.Experiment(
            tf.estimator.Estimator(
                generate_model_fn(
                    learning_rate=hparams.learning_rate,
                    hidden_units=hparams.hidden_units,
                    dropout=hparams.dropout,
                    weights=hparams.weights,
                ),
                config=run_config,
            ),
            train_input_fn=training_fn,
            eval_input_fn=evaluating_fn,
            **args
        )

    return _experimenter_fn

learn_runner.run(
    generate_experimenter_fn(
        train_steps=args.train_steps,
        eval_steps=args.eval_steps,
    ),
    run_config=run_config.RunConfig(model_dir=args.job_dir),
    hparams=hparam.HParams(**args.__dict__),
)

预测

之前发布的所有内容都完美无缺,现在是时候做出一些预测了。正如我所说,我不想在本地使用Tensorflow服务,所以,我正在尝试使用相同的模型和相同的配置创建一个Estimator。

    classifier = tf.estimator.Estimator(
    generate_model_fn(
        learning_rate=args.learning_rate,
        hidden_units=args.hidden_units,
        dropout=args.dropout,
        weights=args.weights,
    ),
    config=run_config.RunConfig(model_dir=args.job_dir),
)

模型似乎根据日志文件正确恢复,所以我想尝试只用一条记录进行简单的预测。该程序永远不会结束,直到我的机器完全倾斜为止。

 def predict_input_fn():
    x = {
        'FN': tf.constant(['A']),
        'SS': tf.constant([1]),
        'SN': tf.constant([2]),
        'SL': tf.constant([3]),
        'NS': tf.constant([4]),
        'NN': tf.constant([5]),
        'NL': tf.constant([6]),
        'LS': tf.constant([7]),
        'LN': tf.constant([8]),
        'LL': tf.constant([9]),
        'FT': tf.constant([0])
    }
    y = x['FT']
    return x,y


predictions = classifier.predict(input_fn=predict_input_fn)

0 个答案:

没有答案