【问题标题】:Tensorflow returns same accuracy regardless of number of steps in classifier.fit无论分类器.fit 中的步数如何,Tensorflow 都会返回相同的准确度
【发布时间】:2017-06-10 01:31:20
【问题描述】:

classifier.fit 函数中将步长从 2000 更改为 1 会返回相同的精度结果。我希望准确度结果会有所不同,有人可以告诉我为什么吗?

代码来自 Tensorflow 示例:

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import os
import numpy as np
import tensorflow as tf

# Data sets
IRIS_TRAINING = os.path.join(os.path.dirname(__file__), "iris_training.csv")
IRIS_TEST = os.path.join(os.path.dirname(__file__), "iris_test.csv")

def main(unused_argv):
    # Load datasets.
    training_set = tf.contrib.learn.datasets.base.load_csv_with_header(
        filename=IRIS_TRAINING, target_dtype=np.int, features_dtype=np.float32)

    test_set = tf.contrib.learn.datasets.base.load_csv_with_header(
        filename=IRIS_TEST, target_dtype=np.int, features_dtype=np.float32)

    # Specify that all features have real-value data
    feature_columns = [tf.contrib.layers.real_valued_column("", dimension=4)]

    # Build 3 layer DNN with 10, 20, 10 units respectively.
    classifier = tf.contrib.learn.DNNClassifier(feature_columns=feature_columns,
                                                hidden_units=[10, 20, 10],
                                                n_classes=3,
                                                model_dir="/tmp/iris_model")

    # Fit model.
    classifier.fit(x=training_set.data,
                   y=training_set.target,
                   steps=1)

    # Evaluate accuracy.
    accuracy_score = classifier.evaluate(x=test_set.data,
                                         y=test_set.target)["accuracy"]
    print('Accuracy: {0:f}'.format(accuracy_score))

    # Classify two new flower samples.
    new_samples = np.array(
        [[6.4, 3.2, 4.5, 1.5], [5.8, 3.1, 5.0, 1.7]], dtype=float)
    y = list(classifier.predict(new_samples, as_iterable=True))
    print('Predictions: {}'.format(str(y)))

if __name__ == "__main__":
  tf.app.run()

【问题讨论】:

  • 我刚刚运行了这个例子,它运行正常。步长 2000 的精度为 0.96666664。

标签: python machine-learning tensorflow neural-network deep-learning


【解决方案1】:

原因很简单:你定义了分类器的model_dir 参数。文档是这样说的:

model_dir:保存模型参数、图形等的目录。这个可以 也可用于将检查点从目录加载到估算器中 继续训练之前保存的模型。

当您多次运行模型时,它不会从头开始学习,而是从 "/tmp/iris_model" 获取之前的权重。

如果你想做一个公平的测试,去掉这个参数,你会看到小步的准确率是如何下降的,而步长是高的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多