从 GCS 向模型提供图像数据 (tfrecords) 的最佳方式是什么?
What is the best way to feed image data (tfrecords) from GCS to your model?
我给自己设定了一个目标,即仅使用 Google 云解决 MNIST 皮肤癌数据集。
在 Google Kubernetes 上使用 GCS 和 Kubeflow。
我使用以下脚本将数据从 jpeg 转换为 tfrecord:
https://github.com/tensorflow/tpu/blob/master/tools/datasets/jpeg_to_tf_record.py
我看过很多他们如何将 csv 文件提供给他们的模型的示例,但没有图像数据的示例。
将所有 tfrecords 复制到 Google 云 Shell 这样我就可以像这样将数据输入我的模型是否明智?
或者有什么更好的方法吗?
提前致谢。
如果您使用的是 Kubeflow,我建议您使用 kubeflow 管道。
对于预处理,您可以使用构建在标准管道数据流图像 gcr.io/ml-pipeline/ml-pipeline-dataflow-tft:latest
之上的图像,您只需复制数据流代码并 运行 它:
FROM gcr.io/ml-pipeline/ml-pipeline-dataflow-tft:latest
RUN mkdir /{folder}
COPY run_dataflow_pipeline.py /{folder}
ENTRYPOINT ["python", "/{folder}/run_dataflow_pipeline.py"]
请参阅此 boilerplate 以了解执行此操作的数据流代码。这个想法是将 TF 记录写入 Google Cloud Storage (GCS)。
随后您可以使用 Google Cloud 的 ML 引擎进行实际训练。在这种情况下,您也可以从图像 google/cloud-sdk:latest
开始,基本上可以使用 bash 脚本复制所需的文件,该脚本将 运行 执行 gcloud 命令以开始训练作业。
FROM google/cloud-sdk:latest
RUN mkdir -p /{src} && \
cd /{src}
COPY train.sh ./
ENTRYPOINT ["bash", "./train.sh"]
将 TF 记录的存储位置传递到模型中的一种优雅方法是使用 TF.data:
# Construct a TFRecordDataset
train_records = [os.path.join('gs://{BUCKET_NAME}/', f.name) for f in
bucket.list_blobs(prefix='data/TFR/train')]
validation_records = [os.path.join('gs://{BUCKET_NAME}/', f.name) for f in
bucket.list_blobs(prefix='data/TFR/validation')]
ds_train = tf.data.TFRecordDataset(train_records, num_parallel_reads=4).map(decode)
ds_val = tf.data.TFRecordDataset(validation_records,num_parallel_reads=4).map(decode)
# potential additional steps for performance:
# https://www.tensorflow.org/guide/performance/datasets)
# Train the model
model.fit(ds_train,
validation_data=ds_val,
...,
verbose=2)
查看此 blog post 以了解类似(更复杂)kubeflow 管道的实际实现
我给自己设定了一个目标,即仅使用 Google 云解决 MNIST 皮肤癌数据集。
在 Google Kubernetes 上使用 GCS 和 Kubeflow。
我使用以下脚本将数据从 jpeg 转换为 tfrecord: https://github.com/tensorflow/tpu/blob/master/tools/datasets/jpeg_to_tf_record.py
我看过很多他们如何将 csv 文件提供给他们的模型的示例,但没有图像数据的示例。
将所有 tfrecords 复制到 Google 云 Shell 这样我就可以像这样将数据输入我的模型是否明智? 或者有什么更好的方法吗?
提前致谢。
如果您使用的是 Kubeflow,我建议您使用 kubeflow 管道。
对于预处理,您可以使用构建在标准管道数据流图像 gcr.io/ml-pipeline/ml-pipeline-dataflow-tft:latest
之上的图像,您只需复制数据流代码并 运行 它:
FROM gcr.io/ml-pipeline/ml-pipeline-dataflow-tft:latest
RUN mkdir /{folder}
COPY run_dataflow_pipeline.py /{folder}
ENTRYPOINT ["python", "/{folder}/run_dataflow_pipeline.py"]
请参阅此 boilerplate 以了解执行此操作的数据流代码。这个想法是将 TF 记录写入 Google Cloud Storage (GCS)。
随后您可以使用 Google Cloud 的 ML 引擎进行实际训练。在这种情况下,您也可以从图像 google/cloud-sdk:latest
开始,基本上可以使用 bash 脚本复制所需的文件,该脚本将 运行 执行 gcloud 命令以开始训练作业。
FROM google/cloud-sdk:latest
RUN mkdir -p /{src} && \
cd /{src}
COPY train.sh ./
ENTRYPOINT ["bash", "./train.sh"]
将 TF 记录的存储位置传递到模型中的一种优雅方法是使用 TF.data:
# Construct a TFRecordDataset
train_records = [os.path.join('gs://{BUCKET_NAME}/', f.name) for f in
bucket.list_blobs(prefix='data/TFR/train')]
validation_records = [os.path.join('gs://{BUCKET_NAME}/', f.name) for f in
bucket.list_blobs(prefix='data/TFR/validation')]
ds_train = tf.data.TFRecordDataset(train_records, num_parallel_reads=4).map(decode)
ds_val = tf.data.TFRecordDataset(validation_records,num_parallel_reads=4).map(decode)
# potential additional steps for performance:
# https://www.tensorflow.org/guide/performance/datasets)
# Train the model
model.fit(ds_train,
validation_data=ds_val,
...,
verbose=2)
查看此 blog post 以了解类似(更复杂)kubeflow 管道的实际实现