首页 文章

如何清楚地解释Keras中单位参数的含义?

提问于
浏览
7

我想知道LSTM如何在Keras工作 . 例如,在_618781中,和许多其他人一样,你可以找到这样的东西:

model.add(LSTM(4, input_shape=(1, look_back)))

“4”是什么意思 . 它是层中神经元的数量 . 通过神经元,我的意思是每个实例给出一个输出?

实际上,我发现this brillant discussion但是并没有真正相信the reference given中提到的解释 .

在该方案中,人们可以看到所示的 num_units ,并且我认为我说这个单元中的每一个都是非常原子的LSTM单元(即4个门)并没有错 . 但是,这些单位是如何连接的?如果我是对的(但不确定), x_(t-1) 的大小为 nb_features ,那么每个特征都是一个单位的输入, num_unit 必须等于 nb_features 对吗?

现在,我们来谈谈keras . 我读过this post and the accepted answer并遇到麻烦 . 的确,答案是:

基本上,形状就像(batch_size,timespan,input_dim),其中 input_dim 可以与 unit 不同

在这种情况下 ?我在以前的参考中遇到麻烦......

而且,它说,

Keras中的LSTM仅定义一个LSTM块,其单元长度为单位长度 .

好的,但是如何定义完整的LSTM图层呢?是 input_shape 隐含地创建了与 time_steps 的数量一样多的块(根据我的说法,这是我的代码中 input_shape 参数的第一个参数?

谢谢你照亮我

编辑:是否也可以清楚地详细说明如何为有状态的LSTM模型重塑大小 (n_samples, n_features) 的数据?如何处理time_steps和batch_size?

2 回答

  • 1

    您可以(完全按照您对完全连接的图层的想法)来考虑它 . 单位是神经元 .

    与大多数众所周知的层类型一样,输出的维数是神经元的数量 .

    不同之处在于,在LSTM中,这些神经元不会彼此完全独立,它们将由于掩盖下的数学运算而相互通信 .

    在进一步讨论之前,看看有关LSTM,其输入/输出以及stative = true / false的使用的非常完整的解释可能会很有趣:Understanding Keras LSTMs . 请注意,您的输入形状应为 input_shape=(look_back, 1) . 输入形状为 (time_steps, features) .

    虽然这是一系列完全连接的图层:

    • 隐藏层1: 4 units

    • 隐藏第2层: 4 units

    • 输出图层: 1 unit
      fully connected layers

    这是一系列LSTM图层:

    哪里 input_shape = (batch_size, arbitrary_steps, 3)

    enter image description here

    每个LSTM层将一遍又一遍地重复使用相同的单位/神经元,直到处理输入中的所有任意时间步长 .

    • 输出将具有形状:

    • (batch, arbitrary_steps, units) 如果 return_sequences=True .

    • (batch, units) 如果 return_sequences=False .

    • 内存状态的大小为 units .

    • 从最后一步处理的输入的大小为 units .

    确切地说,将有两组单元,一组用于原始输入,另一组用于处理来自最后一步的已处理输入 . 由于内部结构,每组将有比参数数量大4倍的参数(这4个与图像无关,它是固定的) .

    Flow:

    • 采用n个步骤和3个功能进行输入

    • 第1层:

    • 对于输入中的每个时间步骤:

    • 在输入上使用4个单位以获得4号结果

    • 在上一步的输出上使用4个循环单位

    • 输出最后一步( return_sequences=False )或全部( return_sequences = True )步骤

    • 输出要素= 4

    • 第2层:

    • 与第1层相同

    • 第3层:

    • 对于输入中的每个时间步骤:

    • 在输入上使用1个单位以获得1号结果

    • 在上一步的输出上使用1个单位

    • 输出最后一步( return_sequences=False )或全部( return_sequences = True )步骤

  • 2

    单位数是LSTM的内部矢量状态 hc 的大小(长度) . 这与输入的形状无关,它由 ifo 门的各种内核进行了升级(通过密集转换) . 在链接的帖子中描述了如何将所得到的潜在特征转换为 hc 的细节 . 在您的示例中,输入数据形状

    (batch_size, timesteps, input_dim)
    

    将转变为

    (batch_size, timesteps, 4)
    

    如果return_sequences为真,否则只有最后一个 h 将被设为 (batch_size, 4) . 我建议使用更高的潜在维度,大多数问题可能是128或256 .

相关问题