Tensorflow LSTM的参数计算

Tensorflow LSTM的参数计算,tensorflow,deep-learning,lstm,Tensorflow,Deep Learning,Lstm,我试图计算LSTM模型的总参数,但我有一些困惑 我搜索了一些答案,例如和。我不知道隐藏单元在参数计算中扮演什么角色(在我的例子中,h1=64,h2=128) 我使用Tensorflow打印了参数的总数,它显示了一个参数的总数是90880。我如何一步一步地得到这个结果,谢谢你在你的例子中,你通过这行定义了一个LSTM单元c1=tf.nn.rnn\u cell.LSTMCell(h1)。为了回答你的问题,这里我将介绍LSTM的数学定义。如下图(图片来源)所示 t:表示时间t f_t被命名为忘记门

我试图计算LSTM模型的总参数,但我有一些困惑

我搜索了一些答案,例如和。我不知道隐藏单元在参数计算中扮演什么角色(在我的例子中,h1=64,h2=128)


我使用Tensorflow打印了参数的总数,它显示了一个参数的总数是90880。我如何一步一步地得到这个结果,谢谢你

在你的例子中,你通过这行定义了一个LSTM单元
c1=tf.nn.rnn\u cell.LSTMCell(h1)
。为了回答你的问题,这里我将介绍LSTM的数学定义。如下图(图片来源)所示

t
:表示时间
t

  • f_t
    被命名为忘记门
  • i\u t
    被命名为输入门
  • o_t
    被命名,然后被调用
  • c_t和h_t
    分别命名为LSTM单元的单元状态和隐藏状态

对于
tf.nn.rnn\u cell.LSTMCell(h1)
h1=64
h\u t
的维度,即
dim(h\u t)=64
,非常感谢您的解释。还有一件事,你知道我怎样才能得到最终结果90880吗?我的意思是,两层(h1=64,h2=128)的W,U,b的尺寸是多少?对不起,我弄错了。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打印的内容相同。
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))