2017-04-10 117 views
1

在Keras中,如果要添加10个单位的LSTM图层,请使用model.add(LSTM(10))。我听说号码10被称为隐藏单元的数量here和输出单元的数量(Keras码here的863行)。Keras LSTM:第一个参数

我的问题是,这两件事情是一样的吗?输出的维度与隐藏单位的数量相同吗?我已阅读了一些教程(如this onethis one),但他们都没有明确说明。

回答

0

为了得到一个很好的直觉,为什么这是有道理的。请记住,LSTM的工作是将一个序列编码成一个向量(可能是总体过度简化,但它是我们需要的)。由hidden_units指定矢量的大小,output是:

seq vector   RNN weights 
(1 X input_dim) * (input_dim X hidden_units), 

其具有1×hidden_​​units(代表你的输入序列进行编码的行向量)。因此,这种情况下的名称被同义使用。

当然,RNN需要多于一个乘法,并且keras实现RNN作为上述矩阵 - 矩阵乘法的序列,而不是向量矩阵。

+1

这似乎暗示隐藏单元的数量是输出单元的数量,但我认为这些是两个独立的东西--LSTM可以按照您的说法将序列编码为另一个序列,但它也可以从一个序列到一个实数,不是吗?所以隐藏的表示不一定与输出相同。 – StatsSorceress

1

隐藏单元的数量是不一样作为输出单元的数量。

数字10控制输出隐藏状态的尺寸(LSTM构造方法的源代码可以找到here.10指定units参数)。在教程的一个已连接于(colah's blog),所述单元的参数将控制载体ħ吨-1ħ,和ħ吨+ 1的尺寸:RNN image

如果要控制网络中LSTM块的数量,则需要将其指定为LSTM层的输入。输入图层的形状是(nb_samples,timesteps,input_dim)Keras documentationtimesteps控制您的网络包含多少个LSTM块。再次参考colah博客上的教程RNN image,时间步将控制网络包含的绿色块的数量。