Загрузить график Tensorflow один раз и использовать его несколько раз? - PullRequest
0 голосов
/ 12 июня 2018

У меня есть модель TF, которая была сохранена с классом tf.train.Saver, и поэтому у меня есть файл .meta, файл data-00000-of-00001, файл индекса и файл контрольных точек.

Я использую его для умозаключений следующим образом:

    graph_num = tf.Graph()
    with graph_num.as_default():
        sess = tf.Session()
        with sess.as_default():

            new_saver = tf.train.import_meta_graph('{}.meta'.format(model_path), clear_devices=True)
            new_saver.restore(sess, ('{}'.format(model_path)))
            sess.run(tf.tables_initializer())

            arr_placeholder = graph_num.get_operation_by_name('arr_placeholder/inp_array').outputs[0]
            str_placeholder = graph_num.get_operation_by_name('str_placeholder/inp_string').outputs[0]
            dropout_keep_prob = graph_num.get_operation_by_name('dropout_keep_prob/keep_prob').outputs[0]

            logis = graph_num.get_tensor_by_name('logits/preds/BiasAdd:0')

            def model_api(input_data):
                # ...preprocessing the input_data...

                a = sess.run(tf.nn.softmax(logis),
                             feed_dict={
                                 arr_placeholder:
                                     np.array(list_of_primary_inputs).reshape(len(list_of_primary_inputs), 142),
                                 dropout_keep_prob: 1.0, str_placeholder: place_holder_list
                             })

                return a

пока все хорошо, но затем я вызываю функцию следующим образом:

tf.reset_default_graph()
result = model_api(test_input_data)

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

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

Это поведение довольно странное, и я не хочу перезагружать график каждый раз, когда хочу передать новый экземпляр (ы).

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

Я тоже видел этот пост: Повторно использовал график и использовал его несколько раз , но это не помогло моему делу.

Я попытался заморозить график (преобразовав существующий мета-граф в .pb), но это также дало мне ошибку с одной из таблиц поиска, которая у меня есть.И это рассматривается как отдельная проблема на GitHub, и, к сожалению, упомянутый там обходной путь (скорее хак) не сработал для меня.Эта проблема все еще открыта: https://github.com/tensorflow/tensorflow/issues/8665

Я даже установил tf.set_random_seed на постоянное значение во время тренировки, и попытался сделать то же самое для части логического вывода, но безрезультатно.

Так что сейчас я нахожусь в своем уме.

Почему это каждый раз дает мне разные результаты?И есть ли способ загрузить график один раз, а затем продолжать запускать новые экземпляры, не сталкиваясь с проблемой несовместимых выходных данных?

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