Я новичок в тензорном потоке и компьютерном обучении, и я тренирую tf.estimator.LinearClassifier в классическом наборе данных MNIST.
После тренировочного процесса я читаю выходные веса и смещения с помощью classifier.get_variable_names()
Я получаю:
"['global_step', 'linear/linear_model/bias_weights', 'linear/linear_model/bias_weights/part_0/Adagrad', 'linear/linear_model/pixels/weights', 'linear/linear_model/pixels/weights/part_0/Adagrad']"
Мой вопрос: в чем разница между linear/linear_model/bias_weights
и linear/linear_model/bias_weights/part_0/Adagrad
? Они оба одинакового размера.
Единственное объяснение, которое я могу себе представить, заключается в том, что linear/linear_model/bias_weights
и linear/linear_model/bias_weights/part_0/Adagrad
представляют соответственно веса в начале и в конце учебного процесса.
Однако я не уверен в этом, и я не могу найти что-либо в сети.
linear/linear_model/bias_weights
- это ваши тренированные весы модели.
linear/linear_model/bias_weights/part_0/Adagrad
приходит от вас с AdaGrad
оптимизатора AdaGrad
. Особенностью этого оптимизатора является то, что он сохраняет "память" прошлых градиентов и использует его для масштабирования градиентов на каждом этапе обучения. См. Статью AdaGrad, если вы хотите узнать больше (очень матовое).
Важная часть состоит в том, что linear/linear_model/bias_weights/part_0/Adagrad
хранит эту "память". Он возвращается, потому что это технически tf.Variable
в вашей программе, однако это не фактическая переменная/вес в вашей модели. Только linear/linear_model/bias_weights
. Конечно, то же самое справедливо и для linear/linear_model/pixels/weights
.