在张量流中将 csv 行导入为数组
Import csv row as array in tensorflow
我有一个包含大量 N
列的 csv 文件:第一列包含标签,另一列 N-1
我的数据的数字表示(来自音乐录音的色度特征) .
我的想法是将输入数据表示为数组。在实践中,我想要一个相当于计算机视觉中数据的标准表示。由于我的数据存储在 csv 中,在输入列车函数的定义中,我需要一个 csv 解析器。我是这样做的
def parse_csv(line):
columns = tf.decode_csv(line, record_defaults=DEFAULTS) # take a line at a time
features = {'songID': columns[0], 'x': columns[1:]} # create a dictionary out of the features
labels = features.pop('songID') # define the label
return features, labels
def train_input_fn(data_file=fp, batch_size=128):
"""Generate an input function for the Estimator."""
# Extract lines from input files using the Dataset API.
dataset = tf.data.TextLineDataset(data_file)
dataset = dataset.map(parse_csv)
dataset = dataset.shuffle(1_000_000).repeat().batch(batch_size)
return dataset.make_one_shot_iterator().get_next()
但是,这个 returns 一个不是很重要的错误:AttributeError: 'list' object has no attribute 'get_shape'
。我知道罪魁祸首是特征字典中 x
的定义,但我不知道如何纠正它,因为从根本上说,我还没有真正理解 tensorflow 的数据结构。
事实证明,特征需要是张量。但是,每一列本身就是一个张量,取 columns[1:]
会得到一个张量列表。要创建一个 higher-dimensional 张量来存储来自 N-1
列的信息,应该使用 tf.stack
:
features = {'songID': columns[0], 'x': tf.stack(columns[1:])} # create a dictionary out of the features
tf.stack应该解决了。
以下线程中提供了完整的代码示例。
我有一个包含大量 N
列的 csv 文件:第一列包含标签,另一列 N-1
我的数据的数字表示(来自音乐录音的色度特征) .
我的想法是将输入数据表示为数组。在实践中,我想要一个相当于计算机视觉中数据的标准表示。由于我的数据存储在 csv 中,在输入列车函数的定义中,我需要一个 csv 解析器。我是这样做的
def parse_csv(line):
columns = tf.decode_csv(line, record_defaults=DEFAULTS) # take a line at a time
features = {'songID': columns[0], 'x': columns[1:]} # create a dictionary out of the features
labels = features.pop('songID') # define the label
return features, labels
def train_input_fn(data_file=fp, batch_size=128):
"""Generate an input function for the Estimator."""
# Extract lines from input files using the Dataset API.
dataset = tf.data.TextLineDataset(data_file)
dataset = dataset.map(parse_csv)
dataset = dataset.shuffle(1_000_000).repeat().batch(batch_size)
return dataset.make_one_shot_iterator().get_next()
但是,这个 returns 一个不是很重要的错误:AttributeError: 'list' object has no attribute 'get_shape'
。我知道罪魁祸首是特征字典中 x
的定义,但我不知道如何纠正它,因为从根本上说,我还没有真正理解 tensorflow 的数据结构。
事实证明,特征需要是张量。但是,每一列本身就是一个张量,取 columns[1:]
会得到一个张量列表。要创建一个 higher-dimensional 张量来存储来自 N-1
列的信息,应该使用 tf.stack
:
features = {'songID': columns[0], 'x': tf.stack(columns[1:])} # create a dictionary out of the features
tf.stack应该解决了。
以下线程中提供了完整的代码示例。