我是Tensorflow和机器学习的新手,正在训练经典MNIST数据集上的tf.estimator.LinearClassifier。
在训练过程之后,我使用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
分别代表训练过程开始和结束时的权重。
但是,我不确定,也找不到任何在线内容。
答案 0 :(得分:0)
linear/linear_model/bias_weights
是您训练的模型权重。
linear/linear_model/bias_weights/part_0/Adagrad
是您使用AdaGrad
优化器而来的。该优化器的特殊功能是保留过去渐变的“内存”,并在每个训练步骤中使用它来重新缩放渐变。如果您想了解更多(非常数学),请参见the AdaGrad paper。
重要的部分是linear/linear_model/bias_weights/part_0/Adagrad
存储此“内存”。返回它是因为它在技术上在程序中是tf.Variable
,但是在模型中它不是实际的变量/权重。只有linear/linear_model/bias_weights
是。当然,linear/linear_model/pixels/weights
也是如此。