2016-09-28 3 views
1

모델을 교육하여 90K 라벨을 분류하고 싶습니다. 그래서 나는 소위 증분 훈련을 사용했습니다.TensorFlow를 사용한 증분 트레이닝

처음에는 모델을 교육하여 1K 개의 레이블 만 분류 한 다음 다른 1K 개의 레이블을 추가하고 최종 FC 계층의 출력 크기를 2K로 확장하고 몇 가지 에포크에 대비합니다. 그 후에 또 다른 1K 레이블을 추가하는 등 ...

최종 FC 이전의 모든 매개 변수가 고정되어 있으므로 출력 기능을 캐시 할 수 있습니다. 제 경우에는 모든 단계에서 모든 변수를 업데이트해야합니다. 내가 설계

솔루션은 다음과 같습니다 1K 라벨

  1. 기차.
  2. 모델 저장.
  3. 그래프를 수정하여 마지막 FC 레이어가 2K 크기를 출력하도록합니다.
  4. 모든 변수를 초기화합니다.
  5. 이전 검사 점을로드하면 모든 매개 변수가 무시되지만 마지막 계층의 가중치는 무시됩니다.
  6. 다시 기차와

를 반복 그래서 여기서 중요한 점은 부분 복원 체크 포인트를 실현하는 것입니다. 모양 불일치가있는 경우

saver.restore(sess, "model.ckpt") 

그러나, 그것은 실패 TensorFlow에서

, 나는 체크 포인트로드 같은 코드를 사용합니다.

변수를 부분적으로 복원/초기화하는 방법이나 증분 형 교육을 다른 방법으로 구현하는 방법에 도움이 될만한 사람이 있습니까?

답변

1

이것은 현재 간단하지 않습니다. 우리는 더 쉽게 사용할 수 있도록 새로운 API를 적극적으로 추가하고 있습니다. 한편

, 당신이 정말로 결정되는 경우가 FC 층의 크기를 변경할 때, :), 다음을 시도 할 수 있습니다 : your_checkpoint_file ( 독자 = tf.train.NewCheckpointReader :

  • 가 리더를 작성을 .) 검사 점 파일에
  • 로드 모든 변수 : cur_vars = reader.get_variable_to_shape_map() 키()
  • 원래 FC 층 제거 cur_vars_without_fc = cur_vars - your_fc_layer_var_name
  • ,691을 보호기 = tf.Saver
  • 새 FC 층의 변수를 초기화 (cur_vars_without_fc) saver.restore (SESS, your_checkpoint_file) : sess.run ([your_fc_layer_var.initializer가])
  • 이러한 변수와 보호기 만들기

희망 하시겠습니까?

셰리

+0

답장을 보내 주셔서 감사합니다. 나는 이것을 시험 할 것이다! – HanXu

관련 문제