为什么 CuDNNLSTM 在 keras 中比 LSTM 有更多的参数?

2023-12-08

我一直在尝试计算 Keras 中 LSTM 单元的参数数量。我创建了两个模型,一个使用 LSTM,另一个使用 CuDNNLSTM。

模型的部分摘要如下

CuDNNLSTM 模型:

    _________________________________________________________________
    Layer (type)                 Output Shape              Param # 
    =================================================================
    embedding (Embedding)        (None, None, 300)         192000
    _________________________________________________________________
    bidirectional (Bidirectional (None, None, 600)         1444800

LSTM模型


    Layer (type)                 Output Shape              Param #
    =================================================================
    embedding_1 (Embedding)      (None, None, 300)         192000    
    _________________________________________________________________  
    bidirectional (Bidirectional (None, None, 600)         1442400

LSTM 中的参数数量遵循互联网上提供的 lstm 参数计算公式。然而,CuDNNLSTM 有 2400 个额外参数。

这些额外参数的原因是什么?

code

    import tensorflow.compat.v1 as tf
    tf.disable_v2_behavior()

    from tensorflow.compat.v1.keras.models import Sequential
    from tensorflow.compat.v1.keras.layers import CuDNNLSTM, Bidirectional, Embedding, LSTM

    model = Sequential()
    model.add(Embedding(640, 300))
    model.add(Bidirectional(<LSTM type>(300, return_sequences=True)))



LSTM 参数可以分为 3 类:输入权重矩阵 (W)、循环权重矩阵 (R)、偏差 (b)。 LSTM 单元的部分计算是W*x + b_i + R*h + b_r where b_i是输入偏差和b_r是经常性的偏见。

如果你让b = b_i + b_r,您可以将上面的表达式重写为W*x + R*h + b。这样做,您就不再需要保留两个单独的偏差向量(b_i and b_r),相反,您只需要存储一个向量(b).

cuDNN 坚持原始数学公式并存储b_i and b_r分别地。 Keras 没有;它只存储b。这就是为什么 cuDNN 的 LSTM 比 Keras 的参数更多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 CuDNNLSTM 在 keras 中比 LSTM 有更多的参数? 的相关文章

随机推荐