Каков наилучший способ передачи данных изображения (tfrecords) из GCS в вашу модель? - PullRequest
0 голосов
/ 11 января 2019

Я поставил себе задачу решить набор данных MNIST Skin Cancer, используя только Google Cloud.

Использование GCS & Kubeflow в Google Kubernetes.

Я преобразовал данные из jpeg в tfrecord с помощью следующего скрипта: https://github.com/tensorflow/tpu/blob/master/tools/datasets/jpeg_to_tf_record.py

Я видел много примеров того, как они подают csv-файл в свою модель, но примеров с данными изображений не было.

Должно ли быть разумным скопировать все tfrecords в Google Cloud Shell, чтобы я мог таким образом передавать данные в свою модель? Или есть какие-нибудь лучшие методы?

Заранее спасибо.

1 Ответ

0 голосов
/ 29 января 2019

В случае, если вы используете 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"]

См. Этот шаблон для кода потока данных, который делает именно это. Идея заключается в том, что вы записываете записи 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)

Ознакомьтесь с этим сообщением в блоге , чтобы узнать о реальной реализации аналогичного (более сложного) конвейера kubeflow

...