Tensorflow神经网络在创建服务器后会针对同一数据预测不同的答案

时间:2018-09-14 10:55:28

标签: python tensorflow server neural-network

我已经使用TensorFlow 1.8.0训练了神经网络,并渴望执行。 经过培训后,我保存了它,并且加载和预测没有问题。 然后,我制作了一个python服务器(使用flask),该服务器加载受过训练的模型以接收JSON格式的数据的POST请求,该请求随后进行了标准化并进入了模型。 但是现在每次我重新启动服务器时,神经网络都会以不同的概率给出不同的答案。 我已经检查过:

  • 服务器接收的数据完全相同。
  • 在没有服务器的情况下手动还原网络并手动向其提供数据时,所有答案都是相同的,并且概率相同。

这是代码的样子:

imports
tf.enable_eager_execution()

model = tf.keras.Sequential([
...
])
optimizer
root = tfe.Checkpoint(optimizer=optimizer, model=model, optimizer_step=tf.train.get_or_create_global_step())    
root.restore(tf.train.latest_checkpoint(checkpoint_directory))

@app.route('/calc', methods=['POST'])
def predict_data():
    read and parse json
    class_ids = ["false", "true"]
    predict_data = tf.convert_to_tensor([data_to_predict])
    predictions = model(predict_data)
    for i, logits in enumerate(predictions):
        class_idx = tf.argmax(logits).numpy()
        p = tf.nn.softmax(logits)[class_idx]
        name = class_ids[class_idx]
        return("{\"Result\":"+ name+",\"Probability\":"+str(float(p))+"}")

if __name__ == '__main__':
app.run(debug, port)

似乎有些权重以某种方式随机初始化,但问题是当我不使用服务器时,everythig会按其要求行事。

1 个答案:

答案 0 :(得分:0)

因此问题不在模型本身或创建服务器中。 我使用配置文件读取检查点目录。我在那儿写过:

 checkpointDir = 'path/to/the/checkpoint'

但是这些引号是不必要的,脚本无法读取路径,因此模型无法还原,所有变量仍然是随机的。

正确的方法是:

checkpointDir = path/to/the/checkpoint

我不完全理解,为什么我只是在代码中写了完整路径时却需要引号,而在编写配置文件时却不需要引号,但这不是重点。