gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:44:58 29 4
gpt4 key购买 nike

我正在针对以下任务训练 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com