2016-09-28 9 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
  • セーバー= tf.Saver
  • があなたの新しいFC層の変数を初期化(cur_vars_without_fc) saver.restore(SESの、your_checkpoint_file):: sess.run([your_fc_layer_var.initializer])が
  • これらの変数とのセーバーを作成します。

希望に役立ちます!

シェリー

+0

ありがとうございます!私はこれを試してみよう! – HanXu

関連する問題