Keras SimpleRNN 的参数数量

you*_*ark 8 machine-learning neural-network deep-learning keras recurrent-neural-network

我有一个SimpleRNN喜欢:

model.add(SimpleRNN(10, input_shape=(3, 1)))
model.add(Dense(1, activation="linear"))
Run Code Online (Sandbox Code Playgroud)

模型摘要说:

simple_rnn_1 (SimpleRNN)   (None, 10)   120       
Run Code Online (Sandbox Code Playgroud)

我很好奇的参数个数120simple_rnn_1

有人能回答我的问题吗?

blu*_*nox 10

当您查看表格的标题时,您会看到标题Param

Layer (type)              Output Shape   Param 
===============================================
simple_rnn_1 (SimpleRNN)   (None, 10)    120   
Run Code Online (Sandbox Code Playgroud)

该数字表示相应层中可训练参数(权重和偏差)的数量,在这种情况下,您的SimpleRNN.

编辑:

权重的计算公式如下:

recurrent_weights + input_weights + 偏差

*响应:(num_features + num_units)* num_units + num_units

解释:

num_units = 等于 RNN 中的单元数

num_features = 等于输入的特征数

现在您的 RNN 中发生了两件事。

首先,您有循环循环,其中将状态循环输入模型以生成下一步。循环步骤的权重为:

recurrent_weights = num_units*num_units

其次,您在每一步都有新的序列输入。

输入权重= num_features*num_units

(通常最后一个 RNN 状态和新输入都连接起来,然后乘以一个权重矩阵,但输入和最后一个 RNN 状态使用不同的权重)

所以现在我们有了权重,缺少的是偏差 - 对于每个单位一个偏差:

偏差= num_units*1

所以最后我们有公式:

recurrent_weights + input_weights +偏差

或者

num_units* num_units + num_features* num_units + 偏差

=

(num_features + num_units)* num_units + 偏差

在您的情况下,这意味着可训练的参数是:

10*10 + 1*10 + 10 = 120

我希望这是可以理解的,如果不只是告诉我 - 这样我就可以对其进行编辑以使其更清楚。


tro*_*mgy 5

使用像这样的简单网络可能更容易在视觉上理解:

在此处输入图片说明

权重数为 16 (4 * 4) + 12 (3 * 4) = 28,偏差数为 4。

其中 4 是单位数,3 是输入维度数,所以公式就像第一个答案:num_units ^ 2 + num_units * input_dim + num_units或者简单地说num_units * (num_units + input_dim + 1),对于问题中给出的参数,它产生 10 * (10 + 1 + 1) = 120 .

  • 我不明白这个图形表示。 (2认同)