python - TensorFlow 神经网络在创建服务器后预测相同数据的不同答案
问题描述
我已经使用 TensorFlow 1.8.0 和 Eager Execution 训练了一个神经网络。训练后我保存了它,加载和预测没有问题。然后我制作了一个 python 服务器(使用烧瓶),它加载训练好的模型以接收带有 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 都必须这样做。
解决方案
正如您所说,您需要设置种子,因此在 TensorFlow 中您可以尝试:
tf.set_random_seed(1234)
推荐阅读
- c# - 无法将位图转换为字节 []
- javascript - Highcharts 6.0 同步错误
- java - 应用程序崩溃并出现日志错误 Resources$NotFoundException: Resource ID #0x0 on using AlertDialog inside ListviewAdapter
- android - 将 Youtube 链接复制到我的应用程序会在 onActivityResult() 中创建 NPE
- python - 成员变量在多个对象之间共享-python
- reactjs - React - 使用 onClick 方法将状态设置为目标
- java - 从 Java RandomAccessFile 读取时如何设置超时
- php - PHP 和 HTML 下载
- python - 如何将 ndarray 附加到列表并从列表中访问每个存储的 ndarray?
- oracle - Oracle 时区转换