python - 涉及序列的任务需要多少个 RNN 单元?

标签 python machine-learning keras nlp recurrent-neural-network

我正在针对以下任务训练 RNN:给定一个包含 30 个单词的序列,然后将该序列分类为二进制类。

在我的网络中拥有超过 30 个单元(LSTM、GRU 或普通 RNN)有好处吗? 我在网上看到过很多例子,其中类似的网络经过多层训练,每层有 100 个单元,但这对我来说没有意义。 细胞数量多于序列长度有何帮助? (在我的例子中,这个长度是 30)

我很困惑,因为根据我的理解,每个单元格接受两个输入 1. 序列的新元素 2. 前一个单元格的输出 因此,在 30 个单元格之后,将不再有新的序列元素输入到该单元格中。每个单元格只会处理前一个单元格的输出(不接收新信息)。

我正在使用 LSTM 单元来完成此任务(但是,我猜测所使用的 RNN 单元的实际类型无关)。

当 GRU 单位与我的序列长度相同时

visible = Input(shape=(30,))
print(np.shape(visible ))
embed=Embedding(vocab_size,2)(visible)
print(np.shape(embed ))
x2=keras.layers.GRU(30, return_sequences=True)(embed)
print(np.shape(x2))

形状:

(?, 30)

(?, 30, 2)

(?, ?, 30)

当 GRU 单位与我的序列长度不同时

visible = Input(shape=(30,))
print(np.shape(visible ))
embed=Embedding(vocab_size,2)(visible)
print(np.shape(embed ))
x2=keras.layers.GRU(250, return_sequences=True)(embed)
print(np.shape(x2))

形状:

(?, 30)

(?, 30, 2)

(?, ?, 250)

形状如何从(?, 30, 2)变化至(?, ?, 250)或发送至(?, ?, 30)甚至?

最佳答案

您需要阅读 RNN 方程和 keras documentation 。 GRU 初始值设定项的第一个参数不是您正在使用的单元数量,而是隐藏状态的维度(或者,用 Keras 尴尬的术语来说,单位).

使用循环层的全部意义在于,您将通过一遍又一遍地应用相同的函数来折叠序列,并且该函数由单个* RNN 单元具体化——如果序列中的每个项目都由不同的细胞,那里不会有任何复发。

为了让事情更清楚,RNN 实现了一个函数 f: (x,h) → h。你给它序列中的第一项 x0 和一些预先初始化的 h-1,它会返回 h0。然后,您可以给相同单元格 x1 和 h0,它会给您 h1,所以等等。现在,您正在玩​​弄的参数只是调整隐藏向量空间的大小;你仍然会得到与之前一样多的 h 向量(==你的输入序列长度),但现在每个 h 向量都位于 ℝ250 而不是 ℝ30 sup>.

* 在浅 RNN 的情况下

关于python - 涉及序列的任务需要多少个 RNN 单元?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53625074/

相关文章:

python - ValueError : Error when checking input: expected conv2d_1_input to have 4 dimensions, 但得到形状为 (8020, 1) 的数组

python - 添加 LSTM 层但获得所需的位置参数 : 'units' error

python - 为列表中的不同数字切换列表中的字符

python - 按列对 csv 进行排序时出错

python - 是否假设另一个单元测试已经测试了单元代码打破隔离的输入?

python - 来自 tf.nn.dynamic_rnn 的值错误 : Dimensions must be equal

python - 验证损失不随回归中的 MLP 移动

python - 将 keras 占位符初始化为自定义层的输入

python - 如何从字典的值打印 Unicode 表情符号

c# - 训练模型而不在 ML.NET 中标记特征