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

在Keras中,当我创建一个有状态的'LSTM'层时,我到底配置了什么?

越飞鸾
2023-03-14

一个普通的Dense层中的第一个参数也是单元,是该层中神经元/节点的数量。然而,标准的LSTM单元如下所示:

(这是《了解LSTM网络》的返工版)

在Keras中,当我创建这样的LSTM对象时,LSTM(units=N,…),我是否真的创建了这些LSTM单元的N?还是LSTM单元内“神经网络”层的大小,即公式中的W?还是别的什么?

对于上下文,我正在基于这个示例代码工作。

以下是留档:https://keras.io/layers/recurrent/

它说:

单位:正整数,输出空间的维数。

这让我认为这是Keras LSTM“层”对象的输出数量。意味着下一层将有N输入。这是否意味着在LSTM层中实际上存在这些LSTM单元的N,或者可能正好有一个LSTM单元运行N迭代,输出这些h[t]值的N,从h[t-N]h[t]

如果它只定义输出的数量,这是否意味着输入仍然可以是,比如说,只有一个,或者我们必须手动创建滞后输入变量x[t-N]x[t],由units=N参数定义的每个LSTM单位一个?

在我写这篇文章时,我想到了参数return\u sequences的作用。如果设置为True,则所有N输出将向前传递到下一层,而如果设置为False,则仅将最后一个h[t]输出传递到下一层。我说得对吗?

共有3个答案

盛浩阔
2023-03-14

Keras递归神经网络“单位”参数的正确直观解释是,使用units=1可以得到教科书中描述的RNN,使用units=n可以得到一个由此类RNN的n独立副本组成的层-它们将具有相同的结构,但是当它们被初始化为不同的权重时,它们会计算出不同的东西。

或者,您可以考虑在LSTM中使用<代码>单元=1 < /代码>,键值(f,i,c,h)是标量;对于units=n,它们将是长度n的向量。

陈飞
2023-03-14

这是否意味着在LSTM层中实际存在N个LSTM单元,或者可能正是一个LSTM单元运行N次迭代,输出N个h[t]值,从h[t-N]到h[t]?

首先是真的。在Keras LSTM层中有N个LSTM单元或单元。

keras.layers.LSTM(units, activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=1, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False) 
N=1
model = Sequential()
model.add(LSTM(N))
柯良骏
2023-03-14

您可以查看这个问题以了解更多信息,尽管它是基于Keras-1. x API的。

基本上,单元表示LSTM中内部单元的尺寸。因为在LSTM中,内部单元(图中的C_t和C_{t-1})、输出掩码(图中的o_t)和隐藏/输出状态(图中的h_t)的维度应该相同,因此输出的维度也应该是单位-长度。

Keras中的LSTM仅定义一个LSTM块,其单元长度为单位。如果您设置了return\u sequence=True,它将返回具有以下形状的内容:(批大小、时间跨度、单位)。如果为false,则只返回最后一次输出的形状(批次大小,单位)

至于输入,您应该为每个时间戳提供输入。基本上,形状类似于(批次大小、时间跨度、输入尺寸),其中输入尺寸可以不同于单元。如果您只想在第一步提供输入,您可以在其他时间步简单地用零填充数据。

 类似资料:
  • 我想创建一个Keras模型,包括一个嵌入层,然后是两个具有dropout 0.5的LSTM,最后是一个具有softmax激活的密集层。 第一个LSTM应该将顺序输出传播到第二层,而在第二层中,我只想在处理完整个序列后获得LSTM的隐藏状态。 我尝试了以下方法: 但是,我遇到以下错误: 显然,LSTM并没有返回我所期望的形状输出。如何修复此问题?

  • 问题内容: 给定训练有素的LSTM模型,我想对单个时间步执行推断,即在下面的示例中。在每个时间步之后,需要记住下一个“批”的内部LSTM状态(内存和隐藏状态)。对于推论的最开始,在给定输入的情况下计算内部LSTM状态。然后将它们存储在传递给LSTM的对象中。在训练期间,此状态会在每个时间步更新。但是,为了进行推断,我希望在批处理之间保存初始状态,即,仅需在最开始时计算初始状态,然后在每次“批处理”

  • 如你所知,是一个已经在互联网上注册的域名。 我想知道为什么我可以创建一个域名为没有从AWS route53获得任何错误。 我已经看过这里的文件了。它看起来像是服务器的名称。com TLD不受我的route53配置的影响。 互联网阻止我影响域的机制是什么?

  • C:\WINDOWS\system32 导入tenstorflow Traceback(最近一次调用最后一次):文件"C:\用户\vbhav\AppData\本地\程序\Python\Python37\lib\site-包\tenstorflow\python\pywrap_tensorflow.py",第64行,在tensorflow.python._pywrap_tensorflow_inte

  • ./src/App。less(./node_modules/css loader/dist/cjs.js??ref--5-oneOf-8-1!。/node_modules/postss loader/src??postss!。/node_modules/resolve url loader??ref--5-oneOf-8-4!。/src/App less)类型错误:此。getOptions不是一个