tf.estimator.Estimator дает различную точность теста при трианой эпохе по эпохе по сравнению со всеми эпохами - PullRequest
0 голосов
/ 15 мая 2019

Я определил простой CNN как мой model_fn для tf.estimator.Estimator и передал его с помощью input_fn:

def input_fn(features, labels, batch_size, epochs):
    dataset = tf.data.Dataset.from_tensor_slices((features))
    dataset = dataset.map(lambda x: tf.cond(tf.random_uniform([], 0, 1) > 0.5, lambda: dataset_augment(x), lambda: x),
                          num_parallel_calls=16).cache()
    dataset_labels = tf.data.Dataset.from_tensor_slices((labels))
    dataset = dataset.zip((dataset, dataset_labels))
    dataset = dataset.shuffle(30000)
    dataset = dataset.repeat(epochs)
    dataset = dataset.batch(batch_size)
    dataset = dataset.prefetch(-1)
    return dataset

когда я тренирую оценщик таким образом, я получаю 43% точности теста после 10 эпох:

steps_per_epoch = data_train.shape[0] // batch_size
for epoch in range(1, epochs + 1):
    cifar100_classifier.train(lambda: input_fn(data_train, labels_train, batch_size, epochs=1), steps=steps_per_epoch)

Но когда я тренируюсь таким образом, я получаю 32% точности теста после 10 эпох:

steps_per_epoch = data_train.shape[0] // batch_size
max_steps = epochs * steps_per_epoch
cifar100_classifier.train(steps=max_steps,
                              input_fn=lambda: input_fn(data_train, labels_train, batch_size, epochs=epochs))

Я просто не могу понять, почему эти два метода дают разные результаты. Кто-нибудь может объяснить, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Поскольку в первом примере вы вызываете input_fn несколько раз, создается впечатление, что вы будете генерировать больше дополненных данных через dataset_augment(x), поскольку вы делаете бросок монеты для каждой x каждой эпохи.

Во втором примере вы делаете эти броски монеты только один раз, а затем обучаете несколько эпох одним и тем же данным. Таким образом, здесь ваш поездный состав фактически «меньше».

.cache() на самом деле не спасает вас от этого в первом примере.

0 голосов
/ 15 мая 2019

веса вашей модели инициализируются случайным образом? это может быть случай.

...