Нейронная сеть Tensorflow предсказывает разные ответы для одних и тех же данных после создания сервера - PullRequest
0 голосов
/ 14 сентября 2018

Я обучил нейронную сеть, используя 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)

Кажется, что некоторые веса каким-то образом инициализируются случайным образом, но проблема в том, что когда я не использую сервер, все действуеткак и должно.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Таким образом, проблема была не в самой модели или создании сервера.Я использовал файл конфигурации, чтобы прочитать каталог контрольных точек.Я написал там:

 checkpointDir = 'path/to/the/checkpoint'

, но эти кавычки были не нужны, и скрипт не смог прочитать путь, поэтому модель не восстановилась, и все переменные остались случайными.

Правильный путь был просто:

checkpointDir = path/to/the/checkpoint

Я не до конца понимаю, зачем мне нужны кавычки, когда я просто написал полный путь в коде, но они мне не нужны при написании файла конфигурации, носейчас дело не в этом.

0 голосов
/ 14 сентября 2018

Как вы сказали, вам нужно установить начальное число, поэтому в Tensorflow вы можете попробовать:

tf.set_random_seed(1234)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...