2016-10-27 2 views
5

지난 며칠 동안 데이터를 tfrecord 형식으로 serialize 한 다음 parse_single_sequence 예제를 사용하여 연속적으로 deserialize 할 때 문제가있었습니다. 상당히 표준적인 RNN 모델과 함께 사용하기 위해 데이터를 검색하려고 시도하고 있습니다. 그러나 이것은 tfrecords 형식과 관련 파이프 라인을 사용하기위한 첫 번째 시도입니다.모양은 랭크 0이되어야하지만 랭크 1입니다. parse_single_sequence_example

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]) 

연관된 스택 추적은 다음과 같습니다 : 그것은 보이지만

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 

내가 GitHub의에 잠재적 인 문제로 이상 게시 여기

내가 데 문제를 재현하는 장난감 예이다 나는 그것을 잘못 사용하고있을 수도 있습니다. Tensorflow Github Issue 그런데 배경 정보가 없으므로 여기에 오류가 실제로 발생하는지 궁금합니다. 올바른 방향으로 도움을 주시면 대단히 감사하겠습니다. 며칠이 지났으며 주위를 파고 들지도 않았습니다. 모두에게 감사드립니다!

답변

0

내 부분에는 나쁜 가정이었습니다. tf.TFRecordReader.read(queue, name=None)은 예제 파서에 직접 전달한 값이 (key, value)이 아닌 것으로 가정했을 때 튜플을 반환합니다.

관련 문제