宽而深的张量流教程:为什么只使用一批评估数据集进行测试



我正在尝试了解张量宽&深度学习教程。人口普查收入数据集有两个用于验证的文件:成人。数据和成人。经过一定数量的时期后,它将打印一个评估(您可以在此处看到完整的代码:https://github.com/tensorflow/models/blob/master/master/official/wide_deep/wide_deep.py(。它使用" Input_FN"来读取CSV文件的输入信息。它用来读取两个文件,即成人。数据和成人。测试。

def input_fn(data_file, num_epochs, shuffle, batch_size):
  """Generate an input function for the Estimator."""
  assert tf.gfile.Exists(data_file), (
      '%s not found. Please make sure you have either run data_download.py or '
      'set both arguments --train_data and --test_data.' % data_file)
  def parse_csv(value):
    print('Parsing', data_file)
    columns = tf.decode_csv(value, record_defaults=_CSV_COLUMN_DEFAULTS)
    features = dict(zip(_CSV_COLUMNS, columns))
    labels = features.pop('income_bracket')
    return features, tf.equal(labels, '>50K')
  # Extract lines from input files using the Dataset API.
  dataset = tf.data.TextLineDataset(data_file)
  if shuffle:
    dataset = dataset.shuffle(buffer_size=_NUM_EXAMPLES['train'])
  dataset = dataset.map(parse_csv, num_parallel_calls=5)
  # We call repeat after shuffling, rather than before, to prevent separate
  # epochs from blending together.
  dataset = dataset.repeat(num_epochs)
  dataset = dataset.batch(batch_size)
  return dataset

它构建了一个估算器,dnnlinearcombinedclassifier,并评估和打印这样的准确性:

...
results = model.evaluate(input_fn=lambda: input_fn(
    FLAGS.test_data, 1, False, FLAGS.batch_size))
# Display evaluation metrics
print('Results at epoch', (n + 1) * FLAGS.epochs_per_eval)
print('-' * 60)
for key in sorted(results):
  print('%s: %s' % (key, results[key]))

我了解您应该 train 用批处理的网络。我的问题是,为什么它们评估批量的模型?他们不应该使用整个评估数据集吗?该数据集具有16281个验证值,不应该调用模型。

_NUM_EXAMPLES = {
  'train': 32561,
  'validation': 16281,
}
...
results = model.evaluate(input_fn=lambda: input_fn(
    FLAGS.test_data, 1, False, _NUM_EXAMPLES['validation']))

使用整个验证数据集是错误的吗?

培训和测试都需要小批次数据,因为否则 May 否则会导致内存错误(OOM(。正确的是,问题在训练中更为重要,因为向后传球有效地增加了记忆消耗。但这并不意味着OOM在推理中是不可能的。

我经验的示例:

  • Python内核使用TensorFlow
  • 死亡
  • 分配张量时

...而且我敢肯定还有更多我还没有见过的例子。根据您的资源,16281可能足够小,可以适合一批,但是通常, 在推理中批次迭代是非常有意义的,并且对于此批次大小有一个单独的设置模型将在另一台机器上运行,资源较少。

最新更新