将图像数据(tfrecords)从GCS馈送到模型的最佳方法是什么?

时间:2019-01-11 08:53:12

标签: google-cloud-platform google-cloud-storage google-kubernetes-engine kubeflow

我为自己设定了仅使用Google Cloud解决MNIST皮肤癌数据集的目标。

在Google Kubernetes上使用GCS和Kubeflow。

我使用以下脚本将数据从jpeg转换为tfrecord: https://github.com/tensorflow/tpu/blob/master/tools/datasets/jpeg_to_tf_record.py

我已经看到了许多示例,他们如何将csv文件提供给他们的模型,却没有包含图像数据的示例。

将所有tfrecords复制到Google Cloud Shell是否明智,这样我就可以将数据提供给我的模型了? 还是有更好的方法可用?

谢谢。

1 个答案:

答案 0 :(得分:1)

在使用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管道的实际实现