尝试使用tensorflow数据集为keras模型准备好CSV

时间:2019-04-28 16:25:17

标签: csv tensorflow dataset shapes tensor

我确实准备好了一个keras CNN模型,期望将[None,20,20,3]数组作为输入。 (这里的图像大小是20。。。)另一方面,我的云存储中确实有一个带有1200(20 * 20 * 3)列的CSV。

我想编写一个具有tensorflow的ETL管道,以获取csv中每一行的[20,20,3]形状张量。

到目前为止,我的代码:

我已经花了几天的时间,并且对这种方法最终会成功充满信心。

import tensorflow as tf

BATCH_SIZE = 30

tf.enable_eager_execution()

X_csv_path = 'gs://my-bucket/dataX.csv'


X_dataset = tf.data.experimental.make_csv_dataset(X_csv_path, BATCH_SIZE, column_names=range(1200) , header=False)
X_dataset = X_dataset.map(lambda x: tf.stack(list(x.values())))

iterator = X_dataset.make_one_shot_iterator()
image = iterator.get_next()

我期望具有[30,1200]形状,但是我仍然得到1200 [30]形状的张量。我的想法是将每条线读取为[1200]形张量,然后将其重塑为[20,20,3]张量以供模型使用。谢谢您的宝贵时间!

1 个答案:

答案 0 :(得分:0)

tf.data.experimental.make_csv_dataset创建一个列数组的OrderedDict。对于您的任务,我将使用tf.data.TextLineDataset

def parse(filename):
    string = tf.strings.split([filename], sep=',').values
    return string

dataset = tf.data.TextLineDataset('sample.csv').map(parse).batch(BATCH_SIZE)
for i in dataset:
    print(i)

这将输出形状为(BATCH_SIZE,row_length)的张量,其中row_length是csv文件中的一行。您可以根据自己的任务应用任何其他预处理