2016-08-30 3 views
2

wildml에서 "RNNs in TensorFlow, a Practical Guide and Undocumented Features" 게시물을 팔로우하고 있으며 tf.train.batch() 기능의 출력을 볼 수 없습니다.tf.train.batch()의 출력을 보는 방법

res = tf.contrib.learn.run_n({"y": batched_data}, n=1, feed_dict=None) 
print("Batch shape: {}".format(res[0]["y"].shape)) 
print(res[0]["y"]) 

또는로는 다음과 같다 : 이후에 근거

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

def make_example(sequence, labels): 
    # The object we return 
    ex = tf.train.SequenceExample() 
    # A non-sequential feature of our example 
    sequence_length = len(sequence) 
    ex.context.feature["length"].int64_list.value.append(sequence_length) 
    # Feature lists for the two sequential features of our example 
    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 
fname = "/home/someUser/PycharmProjects/someTensors" 
writer = tf.python_io.TFRecordWriter(fname) 
for sequence, label_sequence in zip(sequences, label_sequences): 
    ex = make_example(sequence, label_sequence) 
    print ex 
    writer.write(ex.SerializeToString()) 
writer.close() 
print("Wrote to {}".format(fname)) 
reader = tf.TFRecordReader() 
filename_queue = tf.train.string_input_producer([fname]) 
_, serialized_example = reader.read(filename_queue) 
context_parsed, sequence_parsed = tf.parse_single_sequence_example(
serialized=serialized_example, context_features=context_features, 
sequence_features=sequence_features) 

init = tf.initialize_all_variables() 
sess = tf.Session() 
sess.run(init) 
tf.train.start_queue_runners(sess=sess) 

batched_data = tf.train.batch(tensors= 
[context_parsed['length'], sequence_parsed['tokens'],  
sequence_parsed['labels']], batch_size=5, dynamic_pad= True) 

batched_context_data = tf.train.batch(tensors= [context_parsed['length']], 
batch_size=5, dynamic_pad= True) 

batched_tokens_data = tf.train.batch(tensors= 
[sequence_parsed['tokens']], batch_size=5, dynamic_pad= True) 

batched_labels_data = tf.train.batch(tensors= 
[sequence_parsed['labels']], batch_size=5, dynamic_pad= True) 

, 다음과 같이 배치의 출력을 볼 수 있어야한다 : 다음과 같이 저장 로딩하고, 입력을 처리하기위한 코드는 보다 구체적인 경우에 :

res = tf.contrib.learn.run_n({"y": batched_context_data}, n=1, feed_dict=None) 
print("Batch shape: {}".format(res[0]["y"].shape)) 
print(res[0]["y"]) 

불행하게도, TensorFlow 내가 과정을 죽이고 끝낼 수 있도록 두 가지 경우를 계산하는 데 영원히 소요됩니다. 누군가 내가 뭘 잘못하고 있다고 말할 수 있습니까?

대단히 감사합니다!

batched_data = tf.train.batch(...) 

batched_context_data = tf.train.batch(...) 

batched_tokens_data = tf.train.batch(...) 

batched_labels_data = tf.train.batch(...) 

당신이 이동하는 경우 :

tf.train.start_queue_runners(sess=sess) 

... tf.train.batch()에 호출을 포함하는이 라인 앞에 오는 :

답변

2

나는 문제가 tf.train.start_queue_runners()에 대한 호출이 선 것을 의심 tf.train.start_queue_runners() 후 호출 tf.train.batch()에 대한 호출, 그러면 더 이상 교착 상태가 없어야합니다.


왜 이런 일이 발생합니까? tf.train.batch() 함수는 내부적으로 데이터를 배치 할 때 버퍼링 할 대기열을 만들고 TensorFlow에서 이러한 대기열을 채우는 일반적인 방법은 요소를 대기열로 이동시키는 배경 스레드 인 보통 "queue runner"을 만드는 것입니다. tf.train.start_queue_runners() 함수는 호출 된 시점에 등록 된 모든 대기열 러너에 대한 백그라운드 스레드를 시작하지만 대기열 러너가 작성되기 전에 호출되면 해당 스레드는 시작되지 않습니다.

관련 문제