Я использую прототип SequenceExample для чтения / записи данных временных рядов в файл TFRecord.
Я сериализовал пару массивов np следующим образом:
writer = tf.python_io.TFRecordWriter(file_name)
context = tf.train.Features( ... Feature( ... ) ... )
feature_data = tf.train.FeatureList(feature=[
tf.train.Feature(float_list=tf.train.FloatList(value=
np.random.normal(size=([4065000,]))])
labels = tf.train.FeatureList(feature=[
tf.train.Feature(int64_list=tf.train.Int64List(value=
np.random.random_integers(0,10,size=([1084,]))])
##feature_data and labels are of similar, but varying lengths
feature_list = {"feature_data": feature_data,
"labels": labels}
feature_lists = tf.train.FeatureLists(feature_list=feature_list)
example = tf.train.SequenceExample(context=context,
feature_lists=feature_lists)
## serialize and close
При попыткечтобы прочитать файл .tfrecords, я получил довольно много ошибок, в основном потому, что протобуф SequenceExample записывает данные временного ряда в виде серии значений (например, значение: -12.2549, значение: -18.1372, .... значение: 13.1234).Мой код для чтения файла .tfrecords выглядит следующим образом:
dataset = tf.data.TFRecordDataset("data/tf_record.tfrecords")
dataset = dataset.map(decode)
dataset = dataset.make_one_shot_iterator().get_next()
### reshape tensors and feed to estimator###
Моя функция декодирования () определяется следующим образом:
def decode(serialized_proto):
context_features = {...}
sequence_features = {"feature_data": tf.FixedLenSequenceFeature((None,),
tf.float32),
"labels": tf.FixedLenSequenceFeature(((None,),
tf.int64)}
context, sequence = tf.parse_single_sequence_example(serialized_proto,
context_features=context_features,
sequence_features=sequence_features)
return context, sequence
Одна из ошибок заключается в следующем:
Shape [?] is not fully defined for 'ParseSingleSequenceExample/ParseSingleSequenceExample' (op: 'ParseSingleSequenceExample') with input shapes: [], [0], [], [], [], [], [], [], [].
Мой основной вопрос - как думать о структуре наборов данных.Я не уверен, что я действительно понимаю структуру возвращаемых данных.Мне трудно перебирать этот набор данных и возвращать тензоры переменного размера.Заранее спасибо!