【问题标题】:How to use tf.data in tensorflow to read .csv files?如何在 tensorflow 中使用 tf.data 读取 .csv 文件?
【发布时间】:2021-08-25 13:34:38
【问题描述】:

我有三个不同的 .csv 数据集,我通常使用 pandas 读取这些数据集并训练深度学习模型。每个数据都是一个 n x m 矩阵,其中 n 是样本数,m 是特征数。读取数据后,我进行了一些重塑,然后使用 feed_dict 将它们提供给我的深度学习模型:

data1 = pd.DataFrame(np.random.uniform(low=0, high=1, size=(10,3)), columns=['A', 'B', 'C'])
data2 = pd.DataFrame(np.random.uniform(low=0, high=1, size=(10,3)), columns=['A', 'B', 'C'])
data3 = pd.DataFrame(np.random.uniform(low=0, high=1, size=(10,3)), columns=['A', 'B', 'C'])

data = pd.concat([data1, data2, data2], axis=1)

# Some deep learning model that work with data
# An optimizer

with tf.compat.v1.Session() as sess:
     sess.run(init)
     sess.run(optimizer, feed_dict={SOME VARIABLE: data})  

但是我的数据现在太大而无法放入内存中,我想知道如何使用 tf.data 而不是使用 pandas 来读取数据。抱歉,如果我提供的脚本是伪代码而不是我的实际代码。

【问题讨论】:

    标签: python tensorflow deep-learning tensorflow2.0 tf.data.dataset


    【解决方案1】:

    适用于TF2.0及以上。有几种方法可以从 CSV 文件创建数据集:

    1. 我相信您正在使用 pandas 读取 CSV 文件,然后执行此操作

      tf.data.Dataset.from_tensor_slices(dict(pandaDF))

    2. 你也可以试试这个

      tf.data.experimental.make_csv_dataset

    3. 或者这个

      tf.io.decode_csv

    4. 还有这个

      tf.data.experimental.CsvDataset

    详情在这里:Load CSV

    如果您需要在加载 Pandas 之前进行处理,那么您可以按照当前的方法进行处理,而不是使用 pd.concat([data1, data2, data2], axis=1),使用 concatentate 函数

    data1 = pd.DataFrame(np.random.uniform(low=0, high=1, size=(10,3)), columns=['A', 'B', 'C'])
    data2 = pd.DataFrame(np.random.uniform(low=0, high=1, size=(10,3)), columns=['A', 'B', 'C'])
    data3 = pd.DataFrame(np.random.uniform(low=0, high=1, size=(10,3)), columns=['A', 'B', 'C']) 
    
    tf_dataset = tf.data.Dataset.from_tensor_slices(dict(data1))
    tf_dataset = tf_dataset.concatentate(tf.data.Dataset.from_tensor_slices(dict(data2)))
    tf_dataset = tf_dataset.concatentate(tf.data.Dataset.from_tensor_slices(dict(data3)))
    

    更多关于concatenate

    【讨论】:

    • 感谢您的回答。我正在尝试使用tf.data.experimental.make_csv_dataset,我可以从 CSV 文件中加载数据。你知道如何在不使用 For 循环的情况下迭代数据并获取批量数据吗?我不想使用 For 循环,因为我有三个单独的数据集,我喜欢同时从中提取批次(在同一个迭代中)
    • 例如,我首先使用:data1_tf = tf.data.experimental.make_csv_dataset(data1_filepath, batch_size=32, label_name=None, num_epochs=10, shuffle=0, header=True) 读取数据。然后当我尝试使用iterator = data1_tf.make_one_shot_iterator() 创建一个迭代器时,它会产生这个错误:*** AttributeError: 'PrefetchDataset' object has no attribute 'make_one_shot_iterator'
    • 我认为您正在尝试 TF 版本 1。您应该查看 TF 版本 2 中使用 as_numpy_iterator() 的 tf.data 文档
    • 如果您担心在预处理上花费太多时间。您也可以使用tf.data.experimental.savetf.data.Dataset 保存到文件中,然后使用tf.data.experimental.load 加载它。
    猜你喜欢
    • 1970-01-01
    • 2017-12-06
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    相关资源
    最近更新 更多