了解GRU架构 – Keras

我正在使用Mycroft AI唤醒字检测,我试图了解网络的维度.以下几行显示了Keras的模型:

model = Sequential()
model.add(GRU(
        params.recurrent_units, activation='linear',
        input_shape=(pr.n_features, pr.feature_size), dropout=params.dropout, name='net'))
model.add(Dense(1, activation='sigmoid'))

我的功能大小为29 * 13. GRU层有20个单元.我现在的问题是,我的模型如何在GRU层中有2040个可学习的参数?单位是如何连接的?也许我对GRU网络的整体理解是错误的,但我只能找到单个单元的解释,而不是整个网络的解释. GRU网络是否完全连接?
谢谢!

Network Architecture

最佳答案 首先,对于一般的RNN,时间维度可以是任意的.对于你的情况,这意味着数字29没有任何作用.数字2040完全由数字13(特征)和20(GRU中的单位)组成.

要了解数字的来源,请查看wikipedia中的这张图片:

《了解GRU架构 – Keras》

这就是基本GRU单元的外观.
要了解变量的维度,请查看同一维基百科文章中的此公式:

《了解GRU架构 – Keras》

要明白这一点,你只需要知道输入向量x [t]在你的情况下有维度13,内部状态和输出h [t],r [t],z [t],y [t具有维度20.如您所见,有几个地方使用维度参数.所以,我个人不喜欢使用“单位”一词,因为它表明里面有20个“东西”.实际上,它只是内部状态,矩阵和偏差的维度:

有了这些知识,并且还知道公式中的尺寸必须匹配,您可以推导出W矩阵的尺寸必须为20 x 13,U矩阵必须具有20 x 20的尺寸.偏差b必须具有尺寸20.

然后参数的总数计算为

#Params = 3 * dim(W)
        + 3 * dim(U)
        + 3 * dim(b)
        = 3 * 20*13 + 3 * 20*20 + 3 * 20
        = 2040

为了更深入地了解RNN如何在Keras中工作,我强烈推荐this question的答案.它说它是关于LSTM的,但是一切都说适用于GRU.

点赞