我有一个简单的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。 你能回答我的问题吗?
由于
答案 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)
使用像这样的简单网络在视觉上可能更容易理解:
权重数为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。