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



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

我想用张量流编写一个 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文件中的一行。您可以应用任何其他预处理,具体取决于您的任务

最新更新