Я определил простую CNN как мою модель_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))
Я просто не могу понять, почему эти два метода дают разные результаты. Кто-нибудь может объяснить?
cifar100_classifier
? Я предполагаю, что это связано со сбросом гиперпараметров в первом случае. - person McAngus   schedule 15.05.2019