【问题标题】:Trying to get CSV ready for keras model with tensorflow dataset尝试使用 tensorflow 数据集为 keras 模型准备 CSV
【发布时间】:2019-09-17 10:08:23
【问题描述】:

我已经准备好一个 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] 的张量,以供我的模型使用。感谢您的宝贵时间!

【问题讨论】:

    标签: csv tensorflow dataset shapes tensor


    【解决方案1】:

    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 文件中的一行。您可以应用任何额外的预处理,具体取决于您的任务

    【讨论】:

    • 非常感谢 Sharky!有效! :) 我的方法也是一种被认为是最佳做法的方法吗?我背后的想法是,我不希望每次训练模型时都读取图像,所以我准备了所有图像并构建了一个所需格式的 CSV 文件作为新的起点。现在我想在谷歌云的 JupyterLab 中基于这个 CSV 训练不同的模型。有什么建议吗?
    • 基本上,如果你有原始图像作为 numpy 数组的目录,最好使用from_tensor_slices。或者,在某些情况下,您可以将它们转换为单个 tfrecords 文件
    • 好的,谢谢,很高兴知道!以这种方式在 google cloud ml 引擎上使用笔记本实例来学习模型是否可以,或者您是否建议创建一个 python 应用程序(task.py、model.py ...)并使用 gcloud ml-engine 作业提交训练命令终端?
    • 抱歉,无法就此事提供建议。我认为这在很大程度上取决于具体情况
    • 好的,非常感谢您的帮助和愉快的编码!
    猜你喜欢
    • 2019-08-25
    • 2021-08-12
    • 1970-01-01
    • 2021-09-25
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多