Расчет параметров LSTM

Я пытаюсь вычислить общие параметры модели LSTM, и у меня есть некоторая путаница.

Я искал некоторые ответы, такие как эта почта и эта почта. Я не знаю, какова роль скрытых единиц в вычислении параметров (h1=64, h2=128 в моем случае).

import tensorflow as tf

b, t, d_in, d_out = 32, 256, 161, 257

data = tf.placeholder("float", [b, t, d_in])  # [batch, timestep, dim_in]
labels = tf.placeholder("float", [b, t, d_out])  # [batch, timestep, dim_out]

myinput = data
batch_size, seq_len, dim_in = myinput.shape

rnn_layers = []

h1 = 64
c1 = tf.nn.rnn_cell.LSTMCell(h1)
rnn_layers.append(c1)

h2 = 128
c2 = tf.nn.rnn_cell.LSTMCell(h1)
rnn_layers.append(c2)

multi_rnn_cell = tf.nn.rnn_cell.MultiRNNCell(rnn_layers)
rnnoutput, state = tf.nn.dynamic_rnn(cell=multi_rnn_cell, 
inputs=myinput, dtype=tf.float32)

sess = tf.Session()
sess.run(tf.global_variables_initializer())

all_trainable_vars = tf.reduce_sum([tf.reduce_prod(v.shape) for v in tf.trainable_variables()])
print(sess.run(all_trainable_vars))

Я напечатал общее количество параметров, используя Tensorflow, он показал, что общее количество параметров составляет 90880. Как я могу получить этот результат шаг за шагом, спасибо.

Udacity Nanodegree Capstone Project: Классификатор пород собак
Udacity Nanodegree Capstone Project: Классификатор пород собак
Вы можете ознакомиться со скриптами проекта и данными на github .
1
0
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем случае вы определили ячейку LSTM через эту строку c1 = tf.nn.rnn_cell.LSTMCell(h1). Чтобы ответить на ваш вопрос, здесь я представлю математическое определение LSTM. Как на изображении (источник изображения википедия-lstm) ниже,

LSTM

t: значит во время t.

  • f_t назван воротами забвения.
  • i_t называется входными воротами.
  • o_t зовут зовут.
  • c_t, h_t называются состоянием ячейки и скрытым состоянием ячейки LSTM соответственно.

Для tf.nn.rnn_cell.LSTMCell(h1)h1=64 является размерностью h_t, то есть dim(h_t) = 64.

Большое спасибо за ваше объяснение. Еще одна вещь, вы знаете, как я могу получить окончательный результат 90880? Я имею в виду, каковы размеры W, U, b для двух слоев (h1=64, h2=128)?

berlloon 25.07.2019 04:02

Жаль, что я сделал ошибку. c2 = tf.nn.rnn_cell.LSTMCell(h1). Должно быть c2 = tf.nn.rnn_cell.LSTMCell(h2). В моем случае для первого слоя суммарный параметр: 4 * (64 * (64 + 161) + 64) = 57856, а для второго слоя суммарный параметр: 4 * (128 * (128 + 64) + 128) = 98816. Всего 57856 + 98816 = 156672, что совпадает с тем, что напечатал Tensorflow.

berlloon 25.07.2019 08:52

Другие вопросы по теме