Skip to main content
 首页 » 编程设计

python之为什么我们在tensorflow(python)中调用decode_cvs后没有()

2024年09月03日27langtianya

我是 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 
 

我指的是:

dataset = textlines_dataset.map(decode_csv)

请您参考如下方法:

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

试着将 Dataset API 想象成一个管道。进入您的 map(decode_csv) 操作的记录是文本行,但那些出来的是 features, label 的元组,但此映射不会预先调用。它仅在我们使用数据集时根据需要调用。