Лучшая подача данных с использованием наборов данных tenorflow - PullRequest
0 голосов
/ 25 февраля 2020

Я вижу, что моя текущая реализация фида данных не оптимальна, и wi sh, чтобы получить несколько советов, как сделать это быстрее (это мое узкое место).

Моя обработка данных включает чтение из npz файлы, похожие на следующие (но более сложные, которые здесь не актуальны ..):

def load_data_classification(file, param1):
  file_str = file.numpy()
  mesh_data = np.load(file_str, encoding='latin1', allow_pickle=True)
  n = 10
  features = mesh_data['vertices'][n:n + param1]
  label = mesh_data['label']
  name = str(mesh_data['dataset_name']) + ':' + file_str.decode()
  return name, features, label

Мое определение tf.dataset выглядит следующим образом:

  param1 = 20
  batch_size = 16
  shuffle_size = 1000

  def _gen_ds_for_inter(filenames):
    ds_ = tf.data.Dataset.from_tensor_slices(filenames)
    ds_ = ds_.map(lambda file: tf.py_function(func=load_data_classification,
                                              inp=[file, param1],
                                              Tout=(tf.string, tf.float32, tf.int32)))
    return ds_

  n_chunks = 8
  len_cut = int(len(filenames) / n_chunks) * n_chunks
  filenames = filenames[:len_cut]
  filenames_chunks = np.array_split(np.array(filenames), n_chunks)
  ds = tf.data.Dataset.from_tensor_slices(filenames_chunks)
  ds = ds.interleave(_gen_ds_for_inter, cycle_length=4, block_length=16, num_parallel_calls=tf.data.experimental.AUTOTUNE)
  ds = ds.shuffle(shuffle_size)
  ds = ds.batch(batch_size, drop_remainder=False)

Мои вопросы :

  1. Можно ли лучше определить набор данных для ускорения? (Я вижу, что это не оптимально, когда я параллельно запускаю некоторые процессы обучения, и время выполнения каждого индивидуума не увеличивается)

  2. У меня есть много параметров, которые мне нужно отправить, как param1. Не все из них являются числами, и я не нашел хорошего способа обернуть все это в класс Python, поэтому я могу установить различные параметры для каждого экземпляра набора данных.

Есть идеи?

...