gpt4 book ai didi

python - 在 Google Cloud Platform 中读取存储桶中 Keras ML 训练的批量数据的理想方法是什么?

转载 作者:行者123 更新时间:2023-12-01 01:12:17 25 4
gpt4 key购买 nike

这是我第一次尝试在云中训练模型,我正在努力解决所有的小问题。我将训练数据存储在谷歌云平台内的存储桶中,沿着gs://test/train的思路数据集约为100k。目前,数据根据其标签分布在单独的文件夹中。

我不知道访问数据的理想方式。通常在 Keras 中,我将 ImageDataGeneratorflow_from_directory 一起使用,它会自动创建一个生成器,我可以将其输入到我的模型中。

Google Cloud Platform 是否有类似的 Python 函数?

如果不是,通过生成器访问数据的理想方式是什么,以便我可以将其提供给Keras model.fit_generator

谢谢。

最佳答案

ImageDataGenerator.flow_from_directory() 目前不允许您直接从 GCS 存储桶流式传输数据。我认为你有几个选择:

1/将数据从 GCS 复制到用于运行脚本的虚拟机的本地磁盘。我想您是通过 ML Engine 或在 Compute Engine 实例上执行此操作。无论哪种方式,您都可以使用 gsutilpython cloud storage API 在训练脚本的开头复制数据。 。这里有一个缺点:这会在脚本开始时花费您一些时间,尤其是当数据集很大时。

2/使用 tf.keras 时,您可以在 tf.data 数据集上训练模型。这里的好处是 TensorFlow 的 io 实用程序允许您直接从 GCS 存储桶中读取数据。如果您要将数据转换为 TFRecords,您可以实例化 Dataset 对象,而无需先将数据下载到本地磁盘:

# Construct a TFRecordDataset
ds_train tf.data.TFRecordDataset('gs://') # path to TFRecords on GCS
ds_train = ds_train.shuffle(1000).batch(32)

# Fit a tf.keras model
model.fit(ds_train)

参见this question有关 TFRecord 选项的更多信息。这也适用于使用 Dataset.from_tensor_slices 从 GCS 上的图像直接实例化的 Dataset 对象,因此您不必先以 TFRecords 格式存储数据:

def load_and_preprocess_image(path):
"""Read an image GCS path and process it into an image tensor

Args:
path (tensor): string tensor, pointer to GCS or local image path

Returns:
tensor: processed image tensor
"""

image = tf.read_file(path)
image = tf.image.decode_jpeg(image, channels=3)
return image

image_paths = ['gs://my-bucket/img1.png',
'gs://my-bucket/img2/png'...]
path_ds = tf.data.Dataset.from_tensor_slices(image_paths)
image_ds = path_ds.map(load_and_preprocess_image)
label_ds = tf.data.Dataset.from_tensor_slices(labels) # can be a list of labels
model.fit(tf.data.Dataset.zip((images_ds, labels_ds)))

请参阅tutorials on the TF website了解更多示例。

3/最后,还应该可以编写自己的 python 生成器或调整 ImageDataGenerator 的源代码,以便使用 TensorFlow io 函数读取图像。同样,这些可以与 gs:// 路径配合使用:

import tensorflow as tf
tf.enable_eager_execution()
path = 'gs://path/to/my/image.png'
tf.image.decode_png(tf.io.read_file(path)) # this works

另请参阅this related question 。这可能会比上面列出的选项慢。

关于python - 在 Google Cloud Platform 中读取存储桶中 Keras ML 训练的批量数据的理想方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54736505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com