尝试使用tensorflow数据集为keras模型准备CSV
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试使用tensorflow数据集为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文件的一行。您可以根据您的任务应用任何其他预处理
以上是关于尝试使用tensorflow数据集为keras模型准备CSV的主要内容,如果未能解决你的问题,请参考以下文章
如何为 keras 模型使用 tensorflow 自定义损失?