我想用TF估计建立一个简单的模型。以下是我的代码:
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
倍
影响数据集的
repeat()
. 我没有定义
steps
input_fn
生成
tf.errors.OutOfRange
但如果我改变
它总是给出相同的结果。例如,当我使用
num_epoch=4
和
num_epoch=400
测试集的精度将相同。
我是不是误解了这里的训练过程?或者只是巧合?我希望有人能帮我解释为什么会这样