Чтение данных из ведра в гугл мл-движке (tensorflow)

У меня проблемы со чтением данных из корзины, размещенной в Google. У меня есть ведро, содержащее ~ 1000 файлов, к которым мне нужно получить доступ, хранящихся (например) gs://my-bucket/data

Используя gsutil из командной строки или других клиентов Google Python API, я могу получить доступ к данным в корзине, однако импорт этих API по умолчанию не поддерживается в google-cloud-ml-engine.

Мне нужен способ доступа как к данным, так и к именам файлов, либо с помощью библиотеки Python по умолчанию (т.е. os), либо с помощью tensorflow. Я знаю, что в tensorflow где-то встроена эта функция, мне было трудно ее найти.

В идеале я ищу замену для одной команды, такой как os.listdir() и другой для open()

train_data = [read_training_data(filename) for filename in os.listdir('gs://my-bucket/data/')]

Где read_training_data использует объект чтения tensorflow

Спасибо за любую помощь! (Также p.s. мои данные двоичные)


person Moss    schedule 19.09.2017    source источник


Ответы (2)


Если вы просто хотите считать данные в память, то в этом ответе есть необходимые вам детали, а именно использование file_io.

Тем не менее, вы можете рассмотреть возможность использования встроенных механизмов чтения для TensorFlow, поскольку они могут быть более производительными.

Информацию о чтении можно найти здесь. Последним и лучшим (но еще не частью официального «ядра» TensorFlow) является Dataset API (подробнее здесь). ).

Некоторые вещи, которые следует иметь в виду:

  • Используете ли вы формат, который может читать TensorFlow? Можно ли конвертировать в этот формат?
  • Достаточно ли высоки накладные расходы на «кормление», чтобы повлиять на эффективность обучения?
  • Учебный набор слишком велик, чтобы поместиться в памяти?

Если ответ положительный на один или несколько вопросов, особенно на последние два, рассмотрите возможность использования ридеров.

person rhaertel80    schedule 20.09.2017
comment
Я не уверен, как это применимо. Вы имеете в виду обернуть записи gs: в рассол? Что такое рассол? - person netskink; 13.07.2018

Для чего это стоит. У меня также были проблемы с чтением файлов, в частности двоичных файлов из облачного хранилища Google внутри ноутбука Datalab. Первый способ, которым мне удалось это сделать, — скопировать файлы с помощью gs-utils в мою локальную файловую систему и использовать tensorflow для нормального чтения файлов. Это показано здесь после того, как было выполнено копирование файла.

Вот моя установочная ячейка

import math
import shutil
import numpy as np
import pandas as pd
import tensorflow as tf

tf.logging.set_verbosity(tf.logging.INFO)
pd.options.display.max_rows = 10
pd.options.display.float_format = '{:.1f}'.format

Вот ячейка для локального чтения файла в качестве проверки работоспособности.

# this works for reading local file
audio_binary_local = tf.read_file("100852.mp3")
waveform = tf.contrib.ffmpeg.decode_audio(audio_binary_local, file_format='mp3', 
samples_per_second=44100, channel_count=2)
# this will show that it has two channels of data
with tf.Session() as sess:
    result = sess.run(waveform)
    print (result)

Вот чтение файла из gs: напрямую как бинарного файла.

# this works for remote files in gs:
gsfilename = 'gs://proj-getting-started/UrbanSound/data/air_conditioner/100852.mp3'
# python 2
#audio_binary_remote = tf.gfile.Open(gsfilename).read()
# python 3
audio_binary_remote = tf.gfile.Open(gsfilename, 'rb').read()
waveform = tf.contrib.ffmpeg.decode_audio(audio_binary_remote, file_format='mp3', samples_per_second=44100, channel_count=2)
# this will show that it has two channels of data
with tf.Session() as sess:
  result = sess.run(waveform)
  print (result)
person netskink    schedule 09.07.2018