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

2024-09-23 04:35:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在训练一个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单位与我的序列长度不同时

^{2}$

形状:

(?, 30)

(?, 30, 2)

(?, ?, 250)

形状如何从(?, 30, 2)变为(?, ?, 250)或是(?, ?, 30)甚至?在


Tags: 网络np单位序列embed例子单元细胞
1条回答
网友
1楼 · 发布于 2024-09-23 04:35:40

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

使用递归层的全部意义在于,通过反复应用同一个函数,你可以折叠你的序列,这个函数由一个单独的*RNN单元格具体化。如果你的序列中的每一项都由不同的单元格处理,那么在那里就不会有任何重复。在

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

*对于浅RNN

相关问题 更多 >