tf.SequenceExample mit mehrdimensionalen Arrays

In Tensorflow möchte ich ein mehrdimensionales Array in einem TFRecord speichern. Beispielsweise

[[1, 2, 3], [1, 2], [3, 2, 1]]

a die Aufgabe, die ich zu lösen versuche, sequentiell ist, versuche ich, Tensorflows @ zu verwendetf.train.SequenceExample() und beim Schreiben der Daten ist es mir gelungen, die Daten in eine TFRecord-Datei zu schreiben. Wenn ich jedoch versuche, die Daten mit @ aus der TFRecord-Datei zu ladtf.parse_single_sequence_example, Ich werde mit einer großen Anzahl von kryptischen Fehlern begrüßt:

W tensorflow/core/framework/op_kernel.cc:936] Invalid argument: Name: , Key: input_characters, Index: 1.  Number of int64 values != expected.  values size: 6 but output shape: []
E tensorflow/core/client/tensor_c_api.cc:485] Name: , Key: input_characters, Index: 1.  Number of int64 values != expected.  values size: 6 but output shape: []

Die Funktion, mit der ich versuche, meine Daten zu laden, ist unten:

def read_and_decode_single_example(filename):

    filename_queue = tf.train.string_input_producer([filename],
                                                num_epochs=None)

    reader = tf.TFRecordReader()
    _, serialized_example = reader.read(filename_queue)

    context_features = {
         "length": tf.FixedLenFeature([], dtype=tf.int64)
    }

    sequence_features = {
         "input_characters": tf.FixedLenSequenceFeature([],           dtype=tf.int64),
         "output_characters": tf.FixedLenSequenceFeature([], dtype=tf.int64)
    }

    context_parsed, sequence_parsed = tf.parse_single_sequence_example(
    serialized=serialized_example,
    context_features=context_features,
    sequence_features=sequence_features
)

context = tf.contrib.learn.run_n(context_parsed, n=1, feed_dict=None)
print context

Die Funktion, mit der ich die Daten speichere, ist hier:

# http://www.wildml.com/2016/08/rnns-in-tensorflow-a-practical-guide-and-undocumented-features/
def make_example(input_sequence, output_sequence):
    """
    Makes a single example from Python lists that follows the
    format of tf.train.SequenceExample.
    """

    example_sequence = tf.train.SequenceExample()

    # 3D length
    sequence_length = sum([len(word) for word in input_sequence])
    example_sequence.context.feature["length"].int64_list.value.append(sequence_length)

    input_characters = example_sequence.feature_lists.feature_list["input_characters"]
    output_characters = example_sequence.feature_lists.feature_list["output_characters"]

    for input_character, output_character in izip_longest(input_sequence,
                                                          output_sequence):

        # Extend seems to work, therefore it replaces append.
        if input_sequence is not None:
            input_characters.feature.add().int64_list.value.extend(input_character)

        if output_characters is not None:
            output_characters.feature.add().int64_list.value.extend(output_character)

    return example_sequence

Jede Hilfe wäre willkommen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage