我确实准备好了一个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文件中的一行。您可以应用任何其他预处理,具体取决于您的任务