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



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

  • 服务器接收的数据A确实相同。
  • 在没有服务器的情况下手动恢复网络并手动向其提供数据时 - 所有答案都相同,概率相同。

代码如下所示:

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)

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

正如你所说,你需要设置一个种子,所以在Tensorflow中你可以尝试:

tf.set_random_seed(1234)

所以问题不在于模型本身或创建服务器。 我使用配置文件来读取检查点目录。我在那里写过:

checkpointDir = 'path/to/the/checkpoint'

但是这些引号是不必要的,脚本无法读取路径,因此模型没有恢复,所有变量都是随机的。

正确的方式只是:

checkpointDir = path/to/the/checkpoint

我不完全明白,为什么当我只是在代码中编写完整路径但在编写配置文件时不需要它们时我需要引号,但这不是现在的重点。

相关内容

最新更新