为什么CuDNNLSTM在喀拉拉邦中比LSTM具有更多的准分子?

问题描述 投票:-1回答:1

我一直在尝试在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中的参数数量遵循可用于Internet的lstm参数计算公式。但是,CuDNNLSTM有2400个额外的参数。

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

代码

    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)))


keras lstm bidirectional
1个回答
0
投票

LSTM参数可分为3类:输入权重矩阵(W),递归权重矩阵(R),偏差(b)。 LSTM单元的部分计算是W*x + b_i + R*h + b_r,其中b_i是输入偏差,b_r是递归偏差。

如果让b = b_i + b_r,则可以将以上表达式重写为W*x + R*h + b。这样一来,您就无需保留两个单独的偏置矢量(b_ib_r),而只需要存储一个矢量(b)。

cuDNN坚持原始的数学公式,并分别存储b_ib_r。凯拉斯没有;它只存储b。这就是cuDNN的LSTM比Keras具有更多参数的原因。

© www.soinside.com 2019 - 2024. All rights reserved.