尝试使用张量流数据集为 keras 模型准备 CSV

Trying to get CSV ready for keras model with tensorflow dataset

我已经准备好一个 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] 张量来为我的模型提供数据。感谢您的宝贵时间!

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 文件的一行。您可以应用任何额外的预处理,具体取决于您的任务