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

问题描述 投票:0回答:1

我确实准备了一个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]张量,以便为我的模型提供补偿。谢谢你的时间!

csv tensorflow dataset shapes tensor
1个回答
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文件的一行。您可以根据您的任务应用任何其他预处理

© www.soinside.com 2019 - 2024. All rights reserved.