当前位置: 代码迷 >> python >> Tensorflow神经网络在还原后会预测不同的值
  详细解决方案

Tensorflow神经网络在还原后会预测不同的值

热度:20   发布时间:2023-07-14 08:58:09.0

我已经使用TensorFlow 1.8.0训练了神经网络并渴望执行。 经过培训后,我保存了该文件,并且仅在cmd中进行加载和预测时就没有问题。 然后,我制作了一个python服务器(使用flask),该服务器加载受过训练的模型以接收JSON格式的数据的POST请求,该请求随后进行了标准化并进入了模型。 但是,每次我重新启动服务器时,神经网络都会以不同的概率给出不同的答案。 有些权重是通过某种方式随机初始化的,但是问题是,当我不使用服务器时,一切都会按其要求进行。

建议我使用:

tf.set_random_seed(1234)

它确实对随机答案有所帮助,但网络预测与我训练时得到的预测不同。 我更改了tf.set_random_seed中的整数,每次都有不同的结果,所以我想我只需要给tf.set_random_seed提供正确的参数,网络就可以按照我的训练进行工作。

那么,我怎么知道在tf.set_random_seed中确切写什么,或者它与我理解的方式完全不同? 还是其他问题?

代码如下:

imports
tf.enable_eager_execution()

tf.set_random_seed(5)
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)

签出的张量流。

还要使您的张量流训练和Eager Execution与tf.Session()绑定,这会将已经存储的模型图存储在Session类中。

  相关解决方案