In Tensorflow möchte ich ein mehrdimensionales Array zu einem TFRecord speichern. Zum Beispiel:tf.SequenceExample mit mehrdimensionalen Arrays
[[1, 2, 3], [1, 2], [3, 2, 1]]
Da die Aufgabe, die ich sequentiell zu lösen versuchen, versuche ich Tensorflow die tf.train.SequenceExample()
und beim Schreiben der Daten, die ich bin erfolgreich in dem Schreiben die Daten in eine TFRecord-Datei zu verwenden. Allerdings, wenn ich versuche, die Daten aus der TFRecord-Datei zu laden tf.parse_single_sequence_example
verwenden, bin ich 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, die ich zu versuchen, bin mit meinen Daten zu laden, sind 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, die ich die Daten zu speichern, bin mit 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 begrüßt werden würde.
Hallo, können Sie mehr Kontext bieten? Am besten stellen Sie ein minimales Beispiel zur Verfügung, das tatsächlich ausgeführt und getestet werden kann, einschließlich des Schritts, wie Sie Ihre Daten in einer Datei speichern. – jlarsch
Ihr Beispiel ist sehr schwer zu befolgen und Sie erhalten mehr Hilfe, wenn Sie Ihr Beispiel so bearbeiten, dass es den relevanten Kontext enthält. Wenn Sie zum Beispiel den Link betrachten, den Sie in den Code eingegeben haben, wird deutlich, dass der Code, der die Sequenz beschreibt, nicht den Code enthält, der die Daten tatsächlich schreibt. –