当前位置: 首页 > 知识库问答 >
问题:

Keras SimpleRNN的参数数

郑哲彦
2023-03-14

我有一个SimpleRNN像:

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

模型摘要说:

simple_rnn_1 (SimpleRNN)   (None, 10)   120       

我很好奇simple\n\u 1的参数编号是120。

有人能回答我的问题吗?

共有3个答案

东门清夷
2023-03-14

我想象一下你添加的简单,我认为这个数字可以解释很多。

SimpleRNN层,我是这里的新手,不能直接发布图像,所以你需要单击链接。

从展开版本的SimpleRN层中,可以将其视为密集层。前一层是输入和当前层(前一步)本身的串联。

因此,SimpleRN的参数数量可以计算为致密层:

num\u para=units\u pre*units num\u bias

其中:

units\u pre是输入神经元(设置中为1)和单位(见下文)的总和,

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

num\u bias是当前层中偏移项的数目,与单位相同。

插入您的设置,我们实现num\u para=(1 10)*10 10=120。

仲柏
2023-03-14

使用这样一个简单的网络可能更容易直观地理解:

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

其中4是单位数,3是进审量,所以公式就像第一个答案:num_units^2num_units*input_dimnum_units或简单地num_units*(num_unitsinput_dim1),这为问题中给出的参数产生10 * (10 1 1) = 120。

邢博涛
2023-03-14

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

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

该数字表示各层中可训练参数(权重和偏差)的数量,在这种情况下,您的简化了。

编辑:

计算权重的公式如下:

经常性\u权重输入\u权重偏差

num_featuresnum_unitsnum_unitsnum_units

解释:

num\u units=等于RNN中的单元数

num\u features=等于输入的特征数

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

首先,您有一个循环,在这个循环中,状态被循环地输入到模型中,以生成下一步。重复步骤的权重为:

recurrent_weights=num_units*num_units

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

输入权重=num特征*num单位

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

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

偏差=num\u单位*1

最后我们得到了公式:

经常性\u权重输入\u权重偏差

num\u单位*num\u单位num\u特征*num\u单位偏差

=

(num_featuresnum_units)*num_units偏见

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

10*10 1*10 10=120

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

 类似资料:
  • 是否可以在?是否有其他方法将URL从注销应用程序发送到PF注销成功页面? 配置:我使用HTML表单IDP适配器注销,并配置了HTML表单IDP适配器注销URL()作为我的IDP SLO服务URL,我使用以下URL触发IDP启动的SLO:。 注销选项工作正常,我可以看到模板已成功呈现。 我已经为我们的标准定制了这个页面,但是我们在注销成功页面中有一个动态URL作为超链接。(我计划从我们的应用程序发送

  • 按值传递 Lua 函数的参数大部分是按值传递的。值传递就是调用函数时,实参把它的值通过赋值运算传递给形参,然后形参的改变和实参就没有关系了。在这个过程中,实参是通过它在参数表中的位置与形参匹配起来的。 示例代码: local function swap(a, b) --定义函数swap,函数内部进行交换两个变量的值 local temp = a a = b b = temp

  • 1、函数的参数类型 设置与传递参数是函数的重点,而 Python 的函数对参数的支持非常的灵活。 主要的参数类型有:默认参数、关键字参数(位置参数)、不定长参数。 下面我们将一一了解这几种参数。 2、默认参数 有时候,我们自定义的函数中,如果调用的时候没有设置参数,需要给个默认值,这时候就需要用到默认值参数了。 默认参数,只要在构造函数参数的时候,给参数赋值就可以了 例如: # -*- codin

  • 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。 Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。 默认参

  • 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。 Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。 位置参

  • 我想定义一个特征,它告诉一个复杂的表示形式是否是一个结构数组,其中的实际值从来不是AoS,因此不需要用户定义的指定,但对于复杂的表示形式,您总是需要一个: 专门化是通过从std::true/false_type派生而以std方式完成的。 问题是:使用这个实现,我会得到“template argument invidents template parameter”错误(在链接的问题中解释了这一点),