2016-10-27 18 views
5

Trong vài ngày qua, tôi đã gặp sự cố với việc tuần tự hóa dữ liệu thành định dạng tfrecord và sau đó deserializing nó bằng cách sử dụng ví dụ parse_single_sequence. Tôi đang cố gắng lấy dữ liệu để sử dụng với một mô hình RNN khá chuẩn, tuy nhiên đây là nỗ lực đầu tiên của tôi khi sử dụng định dạng tfrecords và đường dẫn đi kèm với nó.Hình dạng phải xếp hạng 0 nhưng là xếp hạng 1, parse_single_sequence_example

Dưới đây là một ví dụ đồ chơi mô phỏng vấn đề tôi đang gặp khó:

import tensorflow as tf 
import tempfile 
from IPython import embed 

sequences = [[1, 2, 3], [4, 5, 1], [1, 2]] 
label_sequences = [[0, 1, 0], [1, 0, 0], [1, 1]] 

def make_example(sequence, labels): 

    ex = tf.train.SequenceExample() 

    sequence_length = len(sequence) 
    ex.context.feature["length"].int64_list.value.append(sequence_length) 

    fl_tokens = ex.feature_lists.feature_list["tokens"] 
    fl_labels = ex.feature_lists.feature_list["labels"] 
    for token, label in zip(sequence, labels): 
     fl_tokens.feature.add().int64_list.value.append(token) 
     fl_labels.feature.add().int64_list.value.append(label) 
    return ex 


writer = tf.python_io.TFRecordWriter('./test.tfrecords') 
for sequence, label_sequence in zip(sequences, label_sequences): 
    ex = make_example(sequence, label_sequence) 
    writer.write(ex.SerializeToString()) 
writer.close() 

tf.reset_default_graph() 

file_name_queue = tf.train.string_input_producer(['./test.tfrecords'], num_epochs=None) 

reader = tf.TFRecordReader() 



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

ex = reader.read(file_name_queue) 

# Parse the example (returns a dictionary of tensors) 
context_parsed, sequence_parsed = tf.parse_single_sequence_example(
    serialized=ex, 
    context_features=context_features, 
    sequence_features=sequence_features 
) 


context = tf.contrib.learn.run_n(context_parsed, n=1, feed_dict=None) 
print(context[0]) 
sequence = tf.contrib.learn.run_n(sequence_parsed, n=1, feed_dict=None) 
print(sequence[0]) 

Các liên stack trace là:

Traceback (most recent call last): 
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/common_shapes.py", line 594, in call_cpp_shape_fn 
status) 
File "/usr/lib/python3.5/contextlib.py", line 66, in exit 
next(self.gen) 
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/errors.py", line 463, in raise_exception_on_not_ok_status 
pywrap_tensorflow.TF_GetCode(status)) 
tensorflow.python.framework.errors.InvalidArgumentError: Shape must be rank 0 but is rank 1 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
File "my_test.py", line 51, in 
sequence_features=sequence_features 
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/parsing_ops.py", line 640, in parse_single_sequence_example 
feature_list_dense_defaults, example_name, name) 
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/parsing_ops.py", line 837, in _parse_single_sequence_example_raw 
name=name) 
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/gen_parsing_ops.py", line 285, in _parse_single_sequence_example 
name=name) 
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/op_def_library.py", line 749, in apply_op 
op_def=op_def) 
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/ops.py", line 2382, in create_op 
set_shapes_for_outputs(ret) 
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/ops.py", line 1783, in set_shapes_for_outputs 
shapes = shape_func(op) 
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/common_shapes.py", line 596, in call_cpp_shape_fn 
raise ValueError(err.message) 
ValueError: Shape must be rank 0 but is rank 1 

Tôi đăng này như một vấn đề tiềm năng trên trên github mặc dù có vẻ như Tôi có thể chỉ sử dụng nó không chính xác: Tensorflow Github Issue Vì vậy, với thông tin cơ bản trên đường đi, tôi chỉ tự hỏi liệu tôi có thực sự mắc lỗi ở đây không? Bất kỳ sự giúp đỡ nào theo đúng hướng sẽ được đánh giá rất cao, chỉ một vài ngày sau đó và việc tôi không đùa giỡn đã không xuất hiện. Cảm ơn tất cả!

Trả lời

0

OK và đó là giả định không tốt về phía tôi. tf.TFRecordReader.read(queue, name=None) trả về một bộ tuple khi tôi cho rằng nó sẽ chỉ trả về giá trị không (key, value) mà tôi đã chuyển trực tiếp vào trình phân tích mẫu.

Các vấn đề liên quan