我学习LSTM已有一段时间了。我从较高的角度了解一切。但是,要使用Tensorflow实施它们,我注意到BasicLSTMCell需要许多单位(即num_units
)参数。
从这个 LSTMs的非常详尽的解释,我已经收集单个LSTM单元是以下情况之一
实际上是GRU单位
我假设参数num_units
的BasicLSTMCell
指的是我们要多少,这些在层挂钩到对方。
这就提出了问题-在这种情况下什么是“单元”?“单元”是否等效于普通前馈神经网络中的一层?
我学习LSTM已有一段时间了。我从较高的角度了解一切。但是,要使用Tensorflow实施它们,我注意到BasicLSTMCell需要许多单位(即num_units
)参数。
从这个 LSTMs的非常详尽的解释,我已经收集单个LSTM单元是以下情况之一
实际上是GRU单位
我假设参数num_units
的BasicLSTMCell
指的是我们要多少,这些在层挂钩到对方。
这就提出了问题-在这种情况下什么是“单元”?“单元”是否等效于普通前馈神经网络中的一层?
Answers:
不幸的是,该术语不一致。num_units
TensorFlow中的隐藏状态数,即您给出的方程式中的维数。
此包装中的单元格定义与文献中使用的定义不同。在文献中,像元是指具有单个标量输出的对象。此程序包中的定义是指此类单元的水平阵列。
“ LSTM层”可能更明确,例如:
def lstm_layer(tparams, state_below, options, prefix='lstm', mask=None):
nsteps = state_below.shape[0]
if state_below.ndim == 3:
n_samples = state_below.shape[1]
else:
n_samples = 1
assert mask is not None
[…]
大多数LSTM / RNN图仅显示隐藏的单元格,而不显示这些单元的单位。因此,混乱。每个隐藏层都有隐藏的单元格,与时间步长一样多。而且,每个隐藏单元格都由多个隐藏单元组成,如下图所示。因此,RNN中隐藏层矩阵的维数为(时间步数,隐藏单位数)。
尽管问题与我在此答案中回答的问题几乎相同,但我想举例说明此问题,该问题在今天的seq2seq模型中也让我有些困惑(感谢@Franck Dernoncourt的回答)。在这个简单的编码器图中:
上面的每个在不同的时间步是相同的单元(GRU或LSTM单元与您的问题相同),并且单元中的权重向量(不偏倚)具有相同的大小(num_units / num_hidden或state_size或output_size) 。
num_units = n
这个数字
Keras中的单位是输出空间的维度,它等于网络重复发生的延迟(time_step)的长度。
keras.layers.LSTM(units, activation='tanh', ....)