Рекомендации по использованию файлов .tfrecord для прогнозирования

#tensorflow #apache-beam #tensorflow-datasets #tfrecord #tfx

#tensorflow #apache-beam #tensorflow-наборы данных #tfrecord #tfx

Вопрос:

Каковы наилучшие методы хранения / чтения данных в / из файлов TFRecord для обучения модели прогнозирования? Я хочу построить модель, которая может прогнозировать работоспособность отдельных машин (например, электродвигателя) на основе их исторических данных о работоспособности (например, исторических данных из парка двигателей, включая каждую скорость двигателя, частоту ошибок, поломку и т. Д.).

Я могу выполнить всю предварительную обработку (нормализовать данные, приписать пропущенные значения, разработать новые функции, разделить на обучающие / проверяющие / тестовые наборы и т. Д.) С помощью Apache Beam / Dataflow. Но я подумал, может быть, было бы лучше хранить необработанные данные в виде файлов .tfrecord и использовать TFX для выполнения нормализации, вменения и т. Д., Чтобы упростить экспериментирование. TFX tensorflow_transform в настоящее время не поддерживает файлы tf.SequenceExample. Поэтому я думал сохранить необработанные данные в виде файлов tf.Example с каждой записью в следующем формате:

 example_proto = tf.train.Example(features=tf.train.Features(feature={
    'timestamp': tf.train.Feature(int64_list=tf.train.Int64List(
        value=[1601200000, 1601200060, 1601200120, ...])),
    'feature0': tf.train.Feature(float_list=tf.train.FloatList(
        value=[np.nan, 15523.0, np.nan, ...])),
    'feature1': tf.train.Feature(float_list=tf.train.FloatList(
        value=[1.0, -8.0, np.nan, ...])),
    ...
    'label': tf.train.Feature(float_list=tf.train.FloatList(
        value=[0.5, -10.3, 2.1, ...])),
}))
  

Что вы думаете? Какие-нибудь советы?

Ответ №1:

В TFX 0.23.0 добавлена поддержка TF.ExampleSequence в некоторых компонентах.

Вы также можете использовать TF.Example, используя список так, как вы описали. Если вам нужно передать последовательность в вашу модель на основе вашего TF.Example, вам нужно будет использовать TF.transform для стекирования и изменения формы считываемых значений.

 float32 = tf.reshape(
        tf.stack(...),
        [-1, timesteps, features)])