내 데이터의 의미 론적 세분화를 위해 CNN 아키텍처 (FCN-8 모델, 사전 학습 된 VGG16 모델)를 구현하고 있습니다 (2 클래스, 따라서 픽셀 당 바이너리 나는 이것에 대해 이동하려는 어떻게 분류)Tensorflow - 전송 학습 구현 (의미 론적 세분화)
은 다음과 같습니다 가중치
- 로드 사전 교육을받은 모델은
- 추가/FCN에의
- 정지 하위 계층을 변환 할 추가 상위 계층을 제거 사전 훈련 된 모델 교육 단계에서 pdate)
- 기차이 올바른 가정 특정 데이터 세트
의 네트워크, 내 tensorflow 모델에 하위 계층 동결에 대해 어떻게 가야합니까? (특정 구현 세부 정보를 찾고 있습니다.) TensorFlow 자습서에서 Inception 재교육을 살펴 보았지만 아직 확실하지 않습니다. , 없이 훈련에게 그것을 기존의 pretrained 모델을 통해 내 데이터를 실행하고 기능 출력을 추출
:
이
내가 생각하고있는 워크 플로우입니다. (어떻게?)상위 레이어가 포함 된 다른 네트워크에 이러한 기능 출력을 제공하고 교육을 받으십시오.
어떤 제안이 도움이 될 것입니다!
그렇지 않으면 내가 틀렸을 때 어떻게 생각해야합니까?
업데이트 : 아래 chasep255의 제안을했다, 내 모델의 하위 계층을 "동결"하도록 tf.stop_gradient을 사용하려고
. 분명히, 저의 구현에는 잘못된 것이 있습니다. 가능한 대안/제안?
모델은 FCN (의미 론적 세분화) 용지를 기반으로 제작되었습니다. 모델 구조, 즉, 나의 특징으로부터 logits
을 추출하고, 이는 softmax 분류기로 최소화하기 위해 처음에 loss
함수로 직접 공급한다. 그때 아래 이러한 그래프 작업을 실행
logits = vgg_fcn.deconv_1
stopper = tf.stop_gradient(logits, 'stop_gradients')
loss = train_func.loss(stopper, labels_placeholder, 2)
with tf.name_scope('Optimizer'):
train_op = train_func.training(loss, FLAGS.learning_rate)
with tf.name_scope('Accuracy'):
eval_correct = train_func.accuracy_eval(logits, labels_placeholder)
accuracy_summary = tf.scalar_summary('Accuracy', eval_correct)
: 내가 이렇게 훈련 사이클을 실행하면
_, acc, loss_value = sess.run([train_op,eval_correct, loss], feed_dict=feed_dict)
이있다 (픽셀 당 분류) deconv_1
모양의, [batch, h, w, num_classes] = [1, 750, 750, 2]
구현 내 logits 텐서입니다 손실 값의 최적화가 없습니다. 가장 정확한 이유는 Op을 소개했기 때문입니다.
더 자세한 내용은 아래 내 손실 함수는 :
def loss(logits, labels, num_classes):
logits = tf.reshape(logits, [-1, num_classes])
#epsilon = tf.constant(value=1e-4)
#logits = logits + epsilon
labels = tf.to_int64(tf.reshape(labels, [-1]))
print ('shape of logits: %s' % str(logits.get_shape()))
print ('shape of labels: %s' % str(labels.get_shape()))
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(logits, labels, name='Cross_Entropy')
cross_entropy_mean = tf.reduce_mean(cross_entropy, name='xentropy_mean')
tf.add_to_collection('losses', cross_entropy_mean)
loss = tf.add_n(tf.get_collection('losses'), name='total_loss')
return loss
안녕하세요 murushiv, 귀하의 로그 코드 = vgg_fcn.deconv_1과 관련하여 MarvinTeichmann의 fcn 구현을 사용하고 있습니까? 나는 그의 코드를 읽고 deconv_1을 찾지 못했습니다. 더 많은 정보를 공유하고 싶습니까? – user288609
@ user288609 약간 수정 된 버전입니다. deconv_1은 최고 점수 방법 중 하나와 동일합니다. (또는 모듈?) 그러나 나는 여기에 오류가 있음을 깨달았습니다. 최고 점수 이전에 탭해야하고, 로그로 사용하고, 업 샘플링 계층까지 훈련해야합니다. – mshiv
안녕하세요 murushiv, 그들의 fcn 구현에서, 거기에 "pred.orence"전에 "pred"레이어가있다, 당신은 로지 (pred)를 직접 손실 함수에서 사용하는 것을 의미합니까? 그런데 오류가 있었다고하셨습니까? 더 자세히 설명해 주시겠습니까? 나는 그들의 구현을 이해하려고 노력하고있다. 도와 주셔서 감사합니다. – user288609