колба с предварительно обученной моделью тензорного потока

Есть ли способ использовать предварительно обученный char-lstm tensorflow с моделью GPU (1.2) в приложении flask (0.12.2)?

Модель работает без проблем при запуске через оболочку. Я загружаю его с помощью следующего кода ниже (без инициализации переменных tf, заполнителей и т.п.):

....

saver = tf.train.Saver()

with tf.Session() as sess:

    saver.restore(sess, SAVE_PATH)
....

При попытке загрузить ту же предварительно обученную модель (с 3 файлами: .meta, .index и .data) через Flask она выдает

ValueError: нет переменных для сохранения

Есть ли способ заставить его работать? Большое спасибо !


person Petar    schedule 08.11.2017    source источник


Ответы (1)


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

Вот самый простой пример, который я смог найти:

import tensorflow as tf

# Create TensorFlow object called hello_constant
hello_constant = tf.constant('Hello World!')

with tf.Session() as sess:
    # Run the tf.constant operation in the session
    output = sess.run(hello_constant)
    print(output)

Более сложный пример, который может быть более полезным для вас:

def model_inputs():
    """
    Create TF Placeholders for input, targets, learning rate, and lengths of source and target sequences.
    :return: Tuple (input, targets, learning rate, keep probability, target sequence length,
    max target sequence length, source sequence length)
    """
    input = tf.placeholder(tf.int32,[None,None],name='input')
    target = tf.placeholder(tf.int32,[None,None])
    target_sequence_len = tf.placeholder(tf.int32, [None], name='target_sequence_length')
    max_target_len = tf.reduce_max(target_sequence_len,name='max_target_length' )
    source_sequence_len = tf.placeholder(tf.int32, [None], name='source_sequence_length')
    learning_rate = tf.placeholder(tf.float32)
    keep_prob = tf.placeholder(tf.float32, name='keep_prob')
    return input, target, learning_rate, keep_prob, target_sequence_len, max_target_len, source_sequence_len

И вот как сделать переменные доступными в сеансе

with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())

Эта тема важна, и мне сложно кратко изложить ее в одном ответе StackOverflow.
Если вы хотите более подробно изучить, как работает система, я бы посоветовал прочитать документация TensorFlow о переменных.

person Pitto    schedule 08.11.2017
comment
Спасибо @Pitto за ответ. Тем не менее я не понимаю, почему это работает в оболочке, а во фляге - нет. Кроме того, не могли бы вы подтвердить, что это не проблема: - Модель имеет автоматически сгенерированные имена узлов - Модель не заблокирована - person Petar; 08.11.2017
comment
Вы смогли решить проблему? Если вы нашли мой ответ полезным, пожалуйста, примите его / проголосуйте :) - person Pitto; 16.03.2018