我想使用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
运行该程序时,测试集的准确性将是相同的。
我在这里误解了培训过程吗?还是只是巧合?我希望有人可以帮助解释为什么会发生
答案 0 :(得分:0)
可能是因为您没有足够的数据。您正在做的是在相同的数据上对其进行训练,并达到“智能”的顶峰。基本上增加数据集,您将在num-epoch
中看到变化。