Как правильно подготовить набор данных из tfrecords для классификации временных рядов в тензорном потоке 2 с использованием tf. набор данных API? - PullRequest
1 голос
/ 27 февраля 2020

Я пытаюсь правильно вернуть набор данных tenorflow из TFRecordDataset, чтобы я мог применить оконную и пакетную функцию, но я думаю, что способ возврата моих проанализированных данных из файлов tfrecords вызывает проблемы, так как я встречался с AttributeError: 'dict' object has no attribute 'batch'.

На этапе обработки данных я подготавливаю свои tfrecords так, что каждый файл является одной временной серией. каждая временная серия имеет несколько функций длинных временных шагов и метку «столбец», это просто метка класса временной серии, повторяемая для каждого временного шага. Мой набор данных огромен, поэтому я хочу избежать любых решений pandas и numpy и работать только с наборами данных tenorflow 2.

Я сделал игрушечный пример для воспроизведения моей ошибки:

import tensorflow as tf
print(tf.__version__)
#2.1.0
import numpy as np

# generating dummy data and writing to file:

feature_dict = {}
feature_dict.update({ 'timesteps' : tf.train.Feature(int64_list=tf.train.Int64List(value=range(50)))})
feature_dict.update({ 'x' : tf.train.Feature(float_list=tf.train.FloatList(value=[np.float(x) for x in range(50)]))})
feature_dict.update({ 'label' : tf.train.Feature(int64_list=tf.train.Int64List(value=np.ones(50).astype(int)))})

example = tf.train.Example(features=tf.train.Features(feature=feature_dict))
with tf.io.TFRecordWriter('./test.tfrecord') as writer:
    writer.write(example.SerializeToString())

# reading file:
def parse_record_function(example_proto):    
    feature_description = {}
    feature_description['timesteps'] = tf.io.FixedLenFeature([50], dtype=tf.int64)
    feature_description['x'] = tf.io.FixedLenFeature([50], dtype=tf.float32)
    feature_description['label'] = tf.io.FixedLenFeature([50], dtype=tf.int64)

    parsed_features = tf.io.parse_single_example(example_proto, feature_description)
    return parsed_features

dataset = tf.data.TFRecordDataset(filenames = './test.tfrecord')
print(dataset)
dataset = dataset.map(parse_record_function)
print(dataset)

#attempting to prepare for timeseries fails:
dataset = dataset.window(10).flat_map(lambda window: window.batch(10))

последняя строка терпит неудачу. AttributeError: 'dict' object has no attribute 'batch'. каким-то образом набор данных является не правильным набором данных, а типом dict из-за синтаксического анализа, происходящего в parse_record_function. Но я подумал, что это правильный способ чтения в tfrecords, по крайней мере, такова моя идея после просмотра учебного руководства по тензорному потоку: https://www.tensorflow.org/tutorials/load_data/tfrecord#read_the_tfrecord_file

Как мне либо написать мои данные в файлах tfrecords или процесс мои данные в parse_record_function, чтобы применить выравнивание окон и пакетов?

В конечном итоге я хочу получить эквивалент данных в формате [batch_size, n_timesteps, n_features] для подачи классификатора временных рядов. Любые дополнительные предложения о том, как двигаться вперед, чтобы это произошло, также приветствуются.

...