Я пытаюсь правильно вернуть набор данных 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] для подачи классификатора временных рядов. Любые дополнительные предложения о том, как двигаться вперед, чтобы это произошло, также приветствуются.