Я хочу создать простую модель, используя 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
, точность набора тестов будет одинаковой.
Не понимаю ли я здесь процесс обучения?или это просто совпадение?Я надеюсь, что кто-то может помочь объяснить, почему это произошло