распознавание рукописного текста (CNN + LSTM + CTC) Требуется объяснение RNN - PullRequest
0 голосов
/ 07 марта 2019

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

Я не понимаю, почему вывод RNN выводится через "atrous_conv2d"

Это архитектура моей модели, она принимает входные данные CNN и передается в этот процесс RNN, а затем передает их CTC.

 def build_RNN(self, rnnIn4d):

    rnnIn3d = tf.squeeze(rnnIn4d, axis=[2])  # squeeze remove 1 dimensions, here it removes the 2nd index

    n_hidden = 256
    n_layers = 2
    cells = []

    for _ in range(n_layers):
        cells.append(tf.nn.rnn_cell.LSTMCell(num_units=n_hidden))

    stacked = tf.nn.rnn_cell.MultiRNNCell(cells)  # combine the 2 LSTMCell created

    # BxTxF -> BxTx2H
    ((fw, bw), _) = tf.nn.bidirectional_dynamic_rnn(cell_fw=stacked, cell_bw=stacked, inputs=rnnIn3d,
                                                    dtype=rnnIn3d.dtype)

    # BxTxH + BxTxH -> BxTx2H -> BxTx1X2H
    concat = tf.expand_dims(tf.concat([fw, bw], 2), 2)

    # project output to chars (including blank): BxTx1x2H -> BxTx1xC -> BxTxC
    kernel = tf.Variable(tf.truncated_normal([1, 1, n_hidden * 2, len(self.char_list) + 1], stddev=0.1))
    rnn = tf.nn.atrous_conv2d(value=concat, filters=kernel, rate=1, padding='SAME')

    return tf.squeeze(rnn, axis=[2])

1 Ответ

1 голос
/ 08 марта 2019

Вход в слой потерь CTC будет иметь вид B x T x C

B - Размер партии T - Максимальная длина вывода (удвоенная максимальная длина слова из-за пустого символа) C - количествосимвол + 1 (пустой символ)

Входные данные для atrous имеют форму (B x T x 1 X 2T) == (пакетный, высота, ширина, канал) фильтр, который мы используем, равен (1,1,2T, C) == (высота, ширина, входной канал, выходной канал)

После неясного CNN мы получим (B, T, 1, C), который является желаемым выходом для CTC

примечание: мы сделаем транспонирование, прежде чем вводить наше изображение в CNN, так как tf является мажорной строкой.

atrous со скоростью 1 такой же, как и у обычного слоя конвона.

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