Оценка Tensorflow: разные номера эпох дают одинаковый результат - PullRequest
0 голосов
/ 09 октября 2018

Я хочу создать простую модель, используя TF Estimator.Ниже приведен мой код:

num_epoch = 4
num_train = 186
num_test = 81

# 1 Define input function
def input_function(x, y, is_train):

    dict_x = {
        "featurename" : x,
    }

    dataset = tf.data.Dataset.from_tensor_slices((
        dict_x, y
    ))

    if is_train:
        dataset = dataset.shuffle(num_train, seed=113).repeat(num_epoch).batch(num_train)
    else:   
        dataset = dataset.batch(num_test)
    return dataset

def my_serving_input_fn2():
    input_data = {
        "featurename" : tf.placeholder(tf.float32, [None, 15], name='inputtensors')
    }
    return tf.estimator.export.ServingInputReceiver(input_data, input_data)


def main(argv):
    tf.set_random_seed(113)
    np.random.seed(113)
    run_config = tf.estimator.RunConfig(save_summary_steps=None, save_checkpoints_secs=None, tf_random_seed=113)

    # 2 Define feature columns
    feature_columns = [
        tf.feature_column.numeric_column(key="featurename",shape=15),
    ]

    # 3 Define an estimator
    classifier = tf.estimator.DNNClassifier(
        feature_columns=feature_columns,
        hidden_units=[15, 15],
        n_classes=3,
        optimizer=tf.train.AdamOptimizer(),
        activation_fn=tf.nn.relu,
        model_dir = 'models/',
        config=run_config
    )

    # Train the model
    classifier.train(
        input_fn=lambda:input_function(X_train, y_train, True)
    )

    # Evaluate the model
    eval_result = classifier.evaluate(
        input_fn=lambda:input_function(X_test, y_test, False)
    )

    print('\nTest set accuracy: {accuracy:0.3f}\n'.format(**eval_result))

if __name__ == "__main__":
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' 
    tf.app.run(main)

Я считаю, что модель будет обучена num_epoch раз, так как num_epoch повлияет на набор данных repeat().Я не определил steps в оценщике, поэтому он будет тренироваться вечно, пока input_fn не сгенерирует tf.errors.OutOfRange.

Но если я изменю значение num_epoch, оно всегда даст тот же результат.Например, когда я запускаю эту программу с num_epoch=4 и num_epoch=400, точность набора тестов будет одинаковой.

Не понимаю ли я здесь процесс обучения?или это просто совпадение?Я надеюсь, что кто-то может помочь объяснить, почему это произошло

1 Ответ

0 голосов
/ 09 октября 2018

Это может быть потому, что у вас недостаточно данных.Что вы делаете, это тренируете его на одних и тех же данных и достигли вершины «интеллекта»Увеличьте свой набор данных в основном, и вы увидите изменения в вашем num-epoch.

...