我确实准备好了一个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]张量以供模型使用。谢谢您的宝贵时间!
答案 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文件中的一行。您可以根据自己的任务应用任何其他预处理