Keras SimpleRNN的参数数量

时间:2018-05-02 12:09:06

标签: parameters keras

我有一个简单的RNN:

model.add(SimpleRNN(10, input_shape=(3, 1)))
model.add(Dense(1, activation="linear"))

模型摘要说:

simple_rnn_1 (SimpleRNN)   (None, 10)   120       

我很好奇simple_rnn_1的参数号120。 你能回答我的问题吗?

由于

3 个答案:

答案 0 :(得分:2)

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

Layer (type)              Output Shape   Param 
===============================================
simple_rnn_1 (SimpleRNN)   (None, 10)    120   

此数字表示相应图层中可训练参数(权重和偏差)的数量,在本例中为SimpleRNN

修改

计算权重的公式如下:

  

recurrent_weights + input_weights +偏见

     

* resp:(num_features + num_units)* num_units + num_units

<强>解释

num_units =等于RNN中的单位数

num_features =等于输入的数字功能

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

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

recurrent_weights = num_units * num_units

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

input_weights = num_features * num_units

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

所以现在我们有权重,缺少什么是偏见 - 对于每个单位一个偏见:

偏见= num_units * 1

所以最后我们有了公式:

recurrent_weights + input_weights +偏见

num_units * num_units + num_features * num_units + biases

=

(num_features + num_units)* num_units +偏见

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

10 * 10 + 1 * 10 + 10 = 120

我希望这是可以理解的,如果不是只是告诉我 - 所以我可以编辑它以使其更清晰。

答案 1 :(得分:1)

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

enter image description here

权重数为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 :(得分:0)

我将添加的SimpleRNN形象化,我认为该图可以说明很多问题。

SimpleRNN layer,我是这里的新手,无法直接发布图片,因此您需要单击链接。

从SimpleRNN层的展开版本可以看出,它是一个密集层。并且上一层是输入和当前层(上一步)本身的串联。

因此,SimpleRNN的参数数量可以计算为密集层:

num_para = units_pre *单位+ num_bias

其中:

units_pre 是输入神经元(设置中为1)和 units (见下文)的总和,

单位是当前层中的神经元数量(在您的设置中为10),

num_bias 是当前层中偏差项的数量,与单位相同。

通过输入您的设置,我们获得 num_para =(1 + 10)* 10 + 10 = 120。