我想教自己RNN,但我有个问题。
所以,想象两层:一个有三个神经元的输入层,一个有2个神经元的经典递归层,以及一个激活函数f。我将写出递归层每个神经元的输出。ht1 = f (W * [x1, [0, 0, N]] + b) ht2 = f (W * [x2, ht1] + b)。结果发现没有使用x3,在这种情况下该怎么办?
另外,让我们想象一下一个稍微不同的RNN体系结构。
两个神经元的输入层(x1, x2)和3个神经元的经典递归层和激活函数f。我将写出递归层每个神经元的输出。ht1 = f (W * [x1, [0, 0, N] + bias]) ht2 = f (W * [x2, ht1] + bias)。原来RNN层的第三个神经元没有被使用,在这种情况下该怎么办?
请帮我弄清楚神经网络在这种情况下是如何工作的。谢谢!
UPD:我意识到,如果递归层中的神经元数量不等于(!=)输入数,我就会发现,我不知道递归神经网络是如何工作的:输入的数量必须总是RNN层中的神经元数量相等。但下面的代码与我的猜测相矛盾。
model = Sequential()
model.add(Embedding(maxWordsCount, 256, input_length = inp_words))
model.add(SimpleRNN(128, activation='tanh'))
model.add(Dense(maxWordsCount, activation='softmax'))
model.summary()这是预测下一个单词的模型。
发布于 2020-12-07 14:29:51
的比较
你在RNN细胞和神经元之间犹豫不决。我知道你在问题中提到了RNN细胞。因此,传统上,序列模型的任何层都会有与序列长度或嵌入大小相同的单元格数。
见细胞与神经元的区别:细胞状态与隐藏状态的差异
参见此处序列模型的输入大小:如何将展开的RNN想象成一个普通的前馈网络?
在SimpleRNN中,第一个参数是每个细胞中单位的数目,即每个细胞中的神经元数目。单元格的数量不是顺序层中的参数,总是等于输入序列的长度或嵌入层的大小。
model = Sequential()
model.add(Embedding(maxWordsCount, 256, input_length = inp_words))
# Below, 128 is the neurons of each cell, and relates to the cell memory capacity.
model.add(SimpleRNN(128, activation='tanh'))发布于 2020-12-08 15:47:36
在SimpleRNN内部,通过矩阵乘法将输入(维数256)投影到维数128的表示空间。RNN操作具有这些大小为128的向量。如果查看源代码SimpleRNN,可以看到投影矩阵存储在名为kernel的成员变量中。您可以看到在方法SimpleRNNCell.call 最重要的事情之一中如何使用K.dot(inputs, self.kernel)来投影输入。
P.D.:对我来说,“神经元”的类比一直是误导人的。我喜欢从可微矩阵运算的角度来考虑神经网络:矩阵乘法、矩阵加法、乙状结肠、双曲切线、ReLU等位置变换,这使得对每个计算步骤的输入和输出的维数更容易进行推理。
https://datascience.stackexchange.com/questions/86327
复制相似问题