我已经使用Estimator API训练RNN模型,并且想绘制成本/时期图并获得最佳的模型权重矩阵。 Estimator API有可能吗? 这是代码:
classifier.train(input_fn=lambda: input_fn_train(train_x, label_train, batch_size),steps=train_steps)
eval_result = classifier.evaluate(input_fn=lambda: input_fn_eval(test_x, label_test, batch_size))
答案 0 :(得分:0)
有可能。您要做的是配置估算器以生成相关信息,这对于您确定要保留的权重很有用。这可以通过检查点来完成。这是模型的“保存”。
将一些配置传递给估算器config=
。
以下是带有自定义估算器的示例:
def model_fn(features, labels, mode, params):
#Some code is here that gives you the output of your model from where
#you get your predictions.
if mode == tf.estimator.ModeKeys.TRAIN or tf.estimator.ModeKeys.EVAL:
#Some more code is here
loss = #your loss function here
tf.summary.scalar('loss', loss)
if mode == tf.estimator.ModeKeys.TRAIN:
#More code here that train your model
if mode == tf.estimator.ModeKeys.EVAL:
#Again more code that you use to get some evaluation metrics
if mode == tf.estimator.ModeKeys.PREDICT:
#Code...
return tf.estimator.EstimatorSpec(mode=mode,
predictions=predictions,
loss=loss,
train_op=train_op,
eval_metric_ops=eval_metric_ops)
configuration = tf.estimator.RunConfig(save_summary_steps=10,
keep_checkpoint_max=30,
save_checkpoints_steps=10,
log_step_count_steps=10)
custom_estimator = tf.estimator.Estimator(model_fn=model_fn,
model_dir='model_dir',
config=configuration)
custom_estimator.train(input_fn=input_fn_train, steps=10000)
save_summary_steps
:实际上,您可以将其想像成几步
估算器将更新您的摘要。这可能很有用,所以您可以绘制损失
每10步。
save_checkpoints_steps
:在当前状态下,估算器将保存几步。
您可以在model_dir
中找到这些检查点。
如果您使用固定估计器,那么我认为摘要是预定义的,但是损失函数已经存在,因此您只需要配置要打印摘要的频率和保存模型状态的频率即可。