тензор потока: чтение данных временного ряда из TFRecord - PullRequest
0 голосов
/ 28 мая 2018

Я использую прототип 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], [], [], [], [], [], [], [].

Мой основной вопрос - как думать о структуре наборов данных.Я не уверен, что я действительно понимаю структуру возвращаемых данных.Мне трудно перебирать этот набор данных и возвращать тензоры переменного размера.Заранее спасибо!

1 Ответ

0 голосов
/ 04 августа 2018

вы можете использовать tf.FixedLenSequenceFeature только тогда, когда форма объекта известна.В противном случае используйте tf.VarLenFeature.

...