为什么在tensorflow(python)中调用encode_cvs之后为什么没有()?

时间:2019-07-19 07:04:58

标签: python tensorflow

我是tensorflow的新手,所以这可能是一个愚蠢的问题,但是: 在定义数据集时,为什么在调用decode_csv函数时不使用调用括号/传递参数?

CSV_COLUMNS = ['fare_amount', 'pickuplon','pickuplat','dropofflon','dropofflat','passengers', 'key']
LABEL_COLUMN = 'fare_amount'
DEFAULTS = [[0.0], [-74.0], [40.0], [-74.0], [40.7], [1.0], ['nokey']]

def read_dataset(filename, mode, batch_size = 512):
  def decode_csv(value_column):
    columns = tf.decode_csv(value_column, record_defaults = DEFAULTS)
    features = dict(zip(CSV_COLUMNS, columns))
    label = features.pop(LABEL_COLUMN)
    return features, label

  # Create list of file names that match "glob" pattern (i.e. data_file_*.csv)
  filenames_dataset = tf.data.Dataset.list_files(filename)
  # Read lines from text files
  textlines_dataset = filenames_dataset.flat_map(tf.data.TextLineDataset)
  # Parse text lines as comma-separated values (CSV)
  dataset = textlines_dataset.map(decode_csv)

  # Note:
  # use tf.data.Dataset.flat_map to apply one to many transformations (here: filename -> text lines)
  # use tf.data.Dataset.map      to apply one to one  transformations (here: text line -> feature list)

  if mode == tf.estimator.ModeKeys.TRAIN:
      num_epochs = None # indefinitely
      dataset = dataset.shuffle(buffer_size = 10 * batch_size)
  else:
      num_epochs = 1 # end-of-input after this

  dataset = dataset.repeat(num_epochs).batch(batch_size)

  return dataset

我指的是这个

  

数据集= textlines_dataset.map(decode_csv)

1 个答案:

答案 0 :(得分:2)

dataset.map函数将一个函数作为参数。当我们使用数据集时,将根据需要调用decode_csv

尝试将Dataset API视为管道。进入map(decode_csv)操作的记录是文本行,但是得出的记录是features, label的元组,但是这种映射不是在前面调用的。只有在我们使用数据集时才需要调用它。