我们一直在人工智能引擎上训练一个由96000个数据点组成的数据集的神经网络。神经网络是以分布式方式训练的,按照惯例,我们使用20 %的数据集作为评价数据。为了对分布进行训练,我们使用了TensorFlow估计器和tf.estimator.train_and_evaluate方法。由于我们的数据集非常大,我们的评估集也相当大.查看主节点与工作节点之间的cpu使用情况,并使用只包含100个样本的评估数据集进行测试,似乎评估不是分布式的,只发生在主节点上。这使得ML单元的消耗量在拥有标准大小评估数据(占总数据的20%)和只有100个评估数据点之间增加了大约5倍,而培训数据的数量是相同的。
我们认为这一问题有两种可能的解决办法:
下面是我认为是代码的相关部分。函数input_fn返回已批处理的tf.data.Dataset。
run_config = tf.estimator.RunConfig(
save_checkpoints_steps=1000, keep_checkpoint_max=10, tf_random_seed=random_seed
)
myestimator = _get_estimator(
hidden_neurons, run_config, learning_rate, output_dir, my_rmse
)
# input_fn for tf.estimator Spec must be a callable function without args.
# So we pack our input_fn in a lambda function
callable_train_input_fn = lambda: input_fn(
filenames=train_paths,
num_epochs=num_epochs,
batch_size=train_batch_size,
num_parallel_reads=num_parallel_reads,
random_seed=random_seed,
input_format=input_format,
)
callable_eval_input_fn = lambda: input_fn(
filenames=eval_paths,
num_epochs=num_epochs,
batch_size=eval_batch_size,
shuffle=False,
num_parallel_reads=num_parallel_reads,
random_seed=random_seed,
input_format=input_format,
)
train_spec = tf.estimator.TrainSpec(
input_fn=callable_train_input_fn, max_steps=max_steps_train
)
eval_spec = tf.estimator.EvalSpec(
input_fn=callable_eval_input_fn,
steps=max_steps_eval,
throttle_secs=throttle_secs,
exporters=[exporter],
name="taxifare-eval",
)
tf.estimator.train_and_evaluate(myestimator, train_spec, eval_spec)https://stackoverflow.com/questions/58970609
复制相似问题