Я обучил нейронную сеть, используя TensorFlow 1.8.0 и нетерпеливое выполнение.После тренировки я его сохранил и проблем с загрузкой и прогнозированием не было.Затем я создал Python-сервер (с использованием колбы), который загружает обученную модель для получения запросов POST с данными в формате json, который впоследствии стандартизируется и переходит к модели.Но теперь каждый раз, когда я перезагружаю сервер, нейронная сеть дает разные ответы с разными вероятностями.Я проверил, что:
- данные, полученные сервером, действительно одинаковы.
- при ручном восстановлении сети без сервера и ручной передаче данных на него - все ответыодинаковы с одинаковыми вероятностями.
Вот как выглядит код:
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)
Кажется, что некоторые веса каким-то образом инициализируются случайным образом, но проблема в том, что когда я не использую сервер, все действуеткак и должно.