2016-08-19 7 views
0

활성화를 VGG19.relu4_1에서 픽셀로 "변환"하는 자동 엔코더를 만들었습니다. tensorflow.contrib.layers (TF 0.10rc0에서와 같이)에 새로운 편의 기능을 사용합니다. 이 코드는 TensorFlow의 CIFAR10 튜토리얼과 비슷한 레이아웃을 가지고 있습니다. train.py은 교육을 수행하고 모델을 디스크에 체크 포인트하고 하나는 eval.py이며 새 체크 포인트 파일을 폴링하고 유추를 실행합니다.Trouble Restore Checkpointed TensorFlow net

내 문제는 평가가 교육만큼 좋지 않다는 것입니다. 손실 기능의 가치 나 출력 이미지를 볼 때도 마찬가지입니다 (교육과 동일한 이미지에서 실행하는 경우에도 마찬가지입니다). 이것은 복원 과정과 관련이 있다고 생각하게 만듭니다.

TensorBoard의 교육 과정에서 얻은 결과물을 보면 (결국) 좋았 기 때문에 인터넷 그 자체에 문제가 있다고 생각하지 않습니다. 이 같은

내 그물 모양 :

import tensorflow.contrib.layers as contrib 
bn_params = {                    
    "is_training": is_training, 
    "center": True, 
    "scale": True 
}                                      

tensor = contrib.convolution2d_transpose(vgg_output, 64*4, 4,        
    stride=2, 
    normalizer_fn=contrib.batch_norm, 
    normalizer_params=bn_params, 
    scope="deconv1")               
tensor = contrib.convolution2d_transpose(tensor, 64*2, 4,        
    stride=2, 
    normalizer_fn=contrib.batch_norm, 
    normalizer_params=bn_params, 
    scope="deconv2") 
. 
. 
. 

그리고 train.py에 나는이 체크 포인트 저장 않습니다

# run code that creates the net 

variable_averages = tf.train.ExponentialMovingAverage(
        mynet.MOVING_AVERAGE_DECAY) 
saver = tf.train.Saver(variable_averages.variables_to_restore()) 

while polling: 
    # sleep and check for new checkpoint files 
    with tf.Session() as sess: 
     init = tf.initialize_all_variables() 
     init_local = tf.initialize_local_variables() 
     sess.run([init, init_local]) 
     saver.restore(sess, checkpoint_path) 

     # run inference (with batch normalization's is_training = False) 

The loss function

: 나는 이렇게 eval.py에서

variable_averages = tf.train.ExponentialMovingAverage(mynet.MOVING_AVERAGE_DECAY) 
variables_averages_op = variable_averages.apply(tf.trainable_variables()) 

with tf.control_dependencies([apply_gradient_op, variables_averages_op]): 
    train_op = tf.no_op(name='train') 

while training: 
    # train (with batch normalization's is_training = True) 
    if time_to_checkpoint: 
     saver.save(sess, checkpoint_path, global_step=step) 

파란색은 학습 손실이며 주황색은 평가 손실입니다.

답변

1

문제는 내가 tf.train.AdamOptimizer()을 직접 사용했기 때문입니다. 최적화 과정에서 contrib.batch_norm에 정의 된 작업을 입력의 실행 평균/분산을 계산하지 않았으므로 평균/분산은 항상 0.0/1.0이었습니다.

해결 방법은 GraphKeys.UPDATE_OPS 컬렉션에 종속성을 추가하는 것입니다. 이미이 기능을 수행하는 contrib 모듈에 정의 된 함수가 있습니다 (optimize_loss())

+0

해결해 주셔서 감사합니다. 이 사실을 잘 느끼는 유일한 사람은 잘 문서화/고쳐 져야합니다. 'optimize_loss()'함수는 다른 contrib.layers가 광고 된대로 작동하는 데 필요한 것과는 달리 optimizer.minimize (loss, step)의 바로 가기에 불과하다고 생각했습니다. – DomJack