python - 为什么在tensorflow(python)中调用decode_cvs后没有()?
问题描述
我是 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)
解决方案
该dataset.map
函数将函数作为参数。当我们开始使用数据集时,decode_csv
将根据需要调用。
试着把 Dataset API 想象成一个管道。进入您的map(decode_csv)
操作的记录是文本行,但出来的是元组,features, label
但此映射不是预先调用的。它仅在我们使用数据集时根据需要调用。
推荐阅读
- javascript - 带有异步功能的 ReferenceError
- ios - 在屏幕之间浏览 - Swift IOS
- ruby-on-rails - 试图让 SMTP 邮件服务器工作,以便在 heroku 上的 rails 应用程序中确认设计
- mysql - 如何优化子查询mysql
- scala - spark write:CSV数据源不支持空数据类型
- vbscript - 如何从子元素中获取父元素?
- python - AWS Glue - 从 sql server 表中读取并作为自定义 CSV 文件写入 S3
- node.js - CouchDB 的 validate_doc_update 与预 DB 验证服务器相比有哪些优势?
- javascript - JavaScript:暂停函数以通过事件侦听器获取值
- visual-studio - 模拟器 Windows 10 移动版:没有互联网连接