2016-09-28 2 views
1

Я хочу подготовить модель для классификации меток 90K, поэтому я использовал так называемое постепенное обучение.Инкрементальное обучение с использованием TensorFlow

Первоначально я обучал модель классификации только 1K-меток, затем добавлял еще 1K-метки и расширял выходной размер финального уровня FC до 2K и тренировал еще несколько эпох. После этого я добавляю еще один ярлык 1K и т. Д.

Обратите внимание, что это НЕ настраивается, в котором ВСЕ параметры перед последним FC фиксированы, поэтому я могу кэшировать выходные функции. В моем случае мне нужно обновить все переменные на каждом этапе.

Решение Я проектировал это:

  1. поезд 1К этикеток.
  2. сохранить модель.
  3. изменить график, чтобы последний уровень FC отображал размер 2K.
  4. инициализировать все переменные
  5. загрузить предыдущую контрольную точку, которая переопределит все параметры, но весы последнего слоя.
  6. поезд снова и повторить

Таким образом, ключевым моментом здесь является то, чтобы реализовать частичное восстановление контрольно-пропускных пунктов.

В TensorFlow, я использую такой код для загрузки контрольной точки:

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

Тем не менее, не удается, когда есть несоответствие формы.

Может ли кто-нибудь помочь, как частично восстановить/инициализировать переменные, так и как реализовать постепенное обучение по-другому?

ответ

1

В настоящее время это не так просто. Мы активно добавляем новые API-интерфейсы, чтобы упростить их работу.

В то же время, если вы действительно определяется, :), вы можете попробовать следующее, когда вы изменить размер FC слоя:

  • Создать читателя: читателя = tf.train.NewCheckpointReader (your_checkpoint_file .)
  • нагрузки все переменные в файл контрольной точки: cur_vars = reader.get_variable_to_shape_map() ключи()
  • Удалить оригинальный FC слой: cur_vars_without_fc = cur_vars - your_fc_layer_var_name
  • Создание заставки с этими переменными: заставка = tf.Saver (cur_vars_without_fc) saver.restore (Sess, your_checkpoint_file)
  • Инициализировать переменные вашего нового ФК слоя: sess.run ([your_fc_layer_var.initializer])

Надеюсь, что это поможет!

Sherry

+0

Спасибо за ваш ответ! Я попробую это! – HanXu