在 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)>,)
我使用以下代码在 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)>,)