在 TensorFlow 中从 CSV 文件加载大型数据集

Loading a large dataset from CSV files in TensorFlow

我使用以下代码在 TensorFlow 中加载我的数据集中的一堆图像,效果很好:

def load(image_file):
      image = tf.io.read_file(image_file)
      image = tf.image.decode_jpeg(image)
      image = tf.cast(image , tf.float32)
      return image

train_dataset = tf.data.Dataset.list_files(PATH+'train/*.jpg')
train_dataset = train_dataset.map(load , num_parallel_calls=tf.data.experimental.AUTOTUNE)

我想知道如何使用类似的代码来加载一堆 CSV 文件。每个 CSV 文件的形状为 256 x 256,可以假设为灰度图像。我不知道在“加载”函数中应该使用什么来代替“tf.image.decode_jpeg”。 非常感谢您的帮助。

您可以通过更改加载函数中的一些内容来实现此目的,如下所示。

def load(image_file):
      image_file = bytes.decode(image_file.numpy())
      image = pd.read_csv(image_file)
      image = image.values
      image = tf.convert_to_tensor(image, dtype=tf.float32,)
      return image  

train_dataset = tf.data.Dataset.list_files(PATH+"/*.csv")
print(train_dataset)
train_dataset = train_dataset.map(lambda x: tf.py_function(load,[x],[tf.float32]) , num_parallel_calls=tf.data.experimental.AUTOTUNE)  

map中用tf.py_function包装加载函数,这样你就可以使用解码file name

示例输出:

for i in train_dataset.take(1):
  print(i) 

(<tf.Tensor: shape=(256, 256), dtype=float32, numpy=
array([[255., 255., 255., ..., 255., 255., 255.],
       [255., 255., 255., ..., 255., 255., 255.],
       [255., 255., 255., ..., 255., 255., 255.],
       ...,
       [255., 255., 255., ..., 255., 255., 255.],
       [255., 255., 255., ..., 255., 255., 255.],
       [255., 255., 255., ..., 255., 255., 255.]], dtype=float32)>,)