Скорость потока Tensorflow 1 против Tensorflow 2 Keras Разница в 2+ раза - PullRequest
0 голосов
/ 07 февраля 2020

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

  1. модель LSTM RNN, построенная с использованием tenorflow 1.x:
    self.input_placeholder = tf.placeholder(
        tf.int32, shape=[self.config.batch_size, self.config.num_steps], name='Input')
    self.labels_placeholder = tf.placeholder(
        tf.int32, shape=[self.config.batch_size, self.config.num_steps], name='Target')
    embedding = tf.get_variable(
        'Embedding', initializer = self.embedding_matrix, trainable = False)
    inputs = tf.nn.embedding_lookup(embedding, self.input_placeholder)
    inputs = [tf.squeeze(x, axis = 1) for x in tf.split(inputs, self.config.num_steps, axis = 1)]
    self.initial_state = tf.zeros([self.config.batch_size, self.config.hidden_size])
    lstm_cell = tf.contrib.rnn.BasicLSTMCell(self.config.hidden_size)
    outputs, _ = tf.contrib.rnn.static_rnn(
        lstm_cell, inputs, dtype = tf.float32, 
        sequence_length = [self.config.num_steps]*self.config.batch_size)
    with tf.variable_scope('Projection'):
        proj_U = tf.get_variable('Matrix', [self.config.hidden_size, self.config.vocab_size])
        proj_b = tf.get_variable('Bias', [self.config.vocab_size])
        outputs = [tf.matmul(o, proj_U) + proj_b for o in rnn_outputs]
та же модель (по крайней мере, насколько я понимаю), построенная с использованием тензор потока 2.0 кера:
def setup_model():
    model = Sequential()
    model.add(Embedding(input_dim=vocab_size,
                        output_dim=embedding_dim,
                        weights=[embedding_matrix],
                        input_length=4,
                        trainable=False))
    model.add(LSTM(config.hidden_size, activation="tanh"))
    model.add(Dense(vocab_size, activation="softmax"))
    return model

Архитектура:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding (Embedding)        (None, 4, 100)            55400     
_________________________________________________________________
lstm (LSTM)                  (None, 100)               80400     
_________________________________________________________________
dense (Dense)                (None, 554)               55954     
=================================================================
Total params: 191,754
Trainable params: 136,354
Non-trainable params: 55,400
_________________________________________________________________

Я ожидал подобного времени выполнения логического вывода, но тот, который построен на tenorflow 1.x, намного быстрее. Я пытался преобразовать модель тензорного потока 1.х в тензорный поток 2, используя только собственные функции тензорного потока, но у меня возникли проблемы с преобразованием из-за большого изменения тензорного потока с 1.х до 2, и я смог создать его только с помощью tf.keras. .

С точки зрения скорости, так как я использую оба для генерации текстовых последовательностей + получения вероятностей слов, поэтому у меня нет единой разницы во времени логического вывода (я не могу изменить существующий API из тензорного потока 1. х модель, чтобы получить это). Но в целом я вижу как минимум двукратную разницу во времени по сравнению с моими вариантами использования.

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

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