问:Tensorflow估算器未正确初始化

时间:2018-06-21 15:22:54

标签: python tensorflow

我已经使用自定义估算器构建并训练了分类器。因为之后需要在单独的数据集上使用它,所以我将model_fn保存在单独的文件中。立即对我的数据集进行训练和评估,方法如下(缩短了input_fn的可读性)

# Instantiate the estimator
birdsclassifier = tf.estimator.Estimator(
    model_fn=cnn_model, model_dir=model_path)
tensors_to_log = {"probabilities": "softmax_tensor"}
logging_hook = tf.train.LoggingTensorHook(
          tensors=tensors_to_log, every_n_iter=50)

# Train the model   
def input_fn():
    #Training dataset preparation happens here
    return {'x': features}, labels
birdsclassifier.train(
    input_fn=input_fn,
    steps=num_steps,
    hooks=[logging_hook])
# Evaluate the model and print results
print('begin eval')
def eval_input_fn():
    #Validation dataset preparation happens here
    return {'x': featuresTest}, labelsT

eval_results = birdsclassifier.evaluate(input_fn=eval_input_fn)
print(eval_results)

并给出以下输出

 {'accuracy': 0.5952381, 'loss': 1.4494723, 'global_step': 2000}

但是只运行带有评估代码的脚本(必须仔细检查改组问题,并且两个验证数据集都相同)

{'accuracy': 0.083333336, 'loss': 4.551247, 'global_step': 2000}

由于全局步长相同,所以该图似乎至少部分是从检查点正确重建的-但是,看起来好像变量未正确加载。同样,重复运行第二个脚本也会使我的输出略有不同。 我还注意到,以较少的步骤重新运行训练脚本会不断增加global_step计数,但也会导致准确性下降,这表明训练从随机开始重新进行

This threadthis都表明我的方法应该可以正常工作。

注意:如果代码片段不足,则其余代码在这里:https://github.com/pbkowalski/cnn_classification_birds

0 个答案:

没有答案