2016-10-31 3 views
1

컨텍스트 : 길쌈 Autoencoder는tf.train.shuffle_batch를 사용하여 교육 및 추론을위한 TF 그래프를 어떻게 만들 수 있습니까?

는 내가 전화를 한 후 이러한 노드를 추출하는 tf.add_to_collections() 추론 동안

Input to neural network from shuffle batch: [batch_size, patch_size, patch_size, depth] 
During training, this is [512, 32, 32, 3] 

Input to neural network for inference: [batch_size, height, width, depth] 
During inference, this can be [1, 100, 100, 3], or [3, 150, 150, 3], etc. 

, 내가 tf.get_collections()를 호출하여 그래프로 input_tensor 및 output_tensor를 추가 sess.run(). 모양이 [512, 32, 32, 3]에 고정되어 있다고 말하면 어떻게 해결할 수 있습니까?

답변

1

하나의 잠재적 인 솔루션은 입력 op에 대한 모양 요구 사항을 완화하기 위해 tf.placeholder_with_default() op를 사용하는 것입니다. 예를 들면 : 당신이 input_placeholder에 따라 달라집니다하지만 먹이를하지 않는 코드를 실행하면

input_batch = tf.train.shuffle_batch(..., batch_size=512) 

input_placeholder = tf.placeholder_with_default(input_batch, [None, None, None, 3]) 

, 그것은 tf.train.shuffle_batch()의 결과를 사용합니다. 또는 input_placeholder 값을 입력하는 경우 4 차원 텐서 (깊이 3)를 공급할 수 있으므로 모든 배치 크기 또는 이미지 크기를 사용할 수 있습니다.

그러나, 이렇게하면 각 배치의 모양이 적어도 원칙적으로 달라질 수 있으므로 교육의 최적화가 비활성화됩니다. 이렇게하면 TensorFlow가 내부 tf.shape() 호출을 상수 값으로 간주하지 않으므로 각 교육 단계에서 더 많은 작업을 수행해야 할 수 있습니다. 결국, 별도로 최적화 할 수 있으므로 교육 및 추론을 위해 두 개의 별도 그래프를 만드는 것이 더 좋습니다.

+0

참조 [이 게시물] (http://stackoverflow.com/questions/35955144/working-with-multiple-graphs-in-tensorflow). Yaroslav는 하나 이상의 그래프를 갖는 것이 거의 유용하지 않다고 언급했습니다. 어떻게해야합니까? 나는 다른 질문 [여기] (http://stackoverflow.com/questions/40352841/how-can-i-build-a-tf-graph-that-has-separate-inference-and-training-parts)을 물었다. – jkschin

관련 문제