Чтение tfrecord: DecodeError: сообщение об ошибке синтаксического анализа

Я использую colab для запуска руководства по о ранжировании тензорного потока. Он использует wget для получения tfrecord:

!wget -O "/tmp/train.tfrecords" "http://ciir.cs.umass.edu/downloads/Antique/tf-ranking/ELWC/train.tfrecords"

Я использую этот код, чтобы посмотреть на структуру tfrecord:

for example in tf.compat.v1.python_io.tf_record_iterator("/tmp/train.tfrecords"):
    print(tf.train.Example.FromString(example))
    break

И я получаю:

DecodeError: Error parsing message

Как вообще посмотреть на структуру tfrecords?

Второй вопрос: где найти документацию по таким классам, как tf.train.Example? Я просто нашел эту пустую страницу.


person PascalIv    schedule 19.05.2020    source источник


Ответы (1)


Суть проблемы заключается в том, что записи сериализуются с использованием другой схемы: схемы ExampleListWithContext вместо базовой схемы tf.train.Example. Обновление правильной десериализации решает проблему.

filenames = ['/tmp/train.tfrecords']
raw_dataset = tf.data.TFRecordDataset(filenames)
for e in raw_dataset.take(1):
    ELWC = input_pb2.ExampleListWithContext()
    v = ELWC.FromString(e.numpy())
    print(v.context)
    for e in v.examples:
        print(e)

выходы:

features {
  feature {
    key: "query"
    value {
      bytes_list {
        value: "why do ..."
      }
    }
  }
  feature {
    key: "query_bert_encoder_outputs"
    value {
      float_list {
...
}}
person fabrizioM    schedule 19.05.2020