导出估算器时是否保存了变量的值(例如批归一化moving_mean
和moving_variance
)? (例如,使用BestExporter)
这是目前我导出模型的方式:
best_exporter = tf.estimator.BestExporter(
name=best_model_path,
serving_input_receiver_fn=serving_input_receiver_fn,
exports_to_keep=1)
exporter = [best_exporter]
train_spec = tf.estimator.TrainSpec(...)
eval_spec = tf.estimator.EvalSpec(...,
exporters=exporter)
tf.estimator.train_and_evaluate(ben_classifier, train_spec, eval_spec)
在培训时,我将BatchNormalization的更新操作添加到培训操作中
optimizer = tf.train.RMSPropOptimizer(learning_rate=L_RATE)
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
train_ops = optimizer.minimize(loss=loss, global_step=tf.train.get_global_step())
return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_ops)
使用tf.contrib.predictor.from_saved_model
恢复不允许检查变量的值。
所以,我的问题是,有没有办法检查它?如果是这样,如何在导出时保存这些BN变量?
我在推理时的表现要比训练和评估时的表现差很多。我舍弃了过度拟合选项,因为它是一个非常简单的网络,而且,在训练结束时(或通常是最后一个),直接使用估算器模型执行预测会比最佳模型产生更好的性能。