问题标签 [gated-recurrent-unit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tensorflow - Tensorflow - 机器翻译解码器
我正在阅读Tensorflow关于使用注意力机制的神经机器翻译的教程。
它具有以下解码器代码:
我在这里不明白的是,解码器的 GRU 单元没有通过使用编码器的最后一个隐藏状态初始化它来连接到编码器。
根据我的理解,编码器和解码器之间存在联系,只有当解码器使用“思想向量”或编码器的最后隐藏状态进行初始化时。
为什么在 Tensorflow 的官方教程中没有这个?这是一个错误吗?还是我在这里遗漏了什么?
有人可以帮我理解吗?
python - 为 GRU 调整 LSTM 编码器解码器序列预测循环
如何解决此错误?
ValueError: Layer model_101 expects 2 input(s), but it received 1 input tensors. Inputs received: [<tf.Tensor 'IteratorGetNext:0' shape=(None, 1, 1, 64) dtype=float32>]
我正在遵循Jason Brownlee 关于如何开发用于序列到序列预测的编码器-解码器模型的指南。除了使用 LSTM 单元,我还希望能够使用 GRU 单元。我设法让 LSTMa 和 GRU 的所有工作都正常工作,我可以通过调整教程中的“define_models”函数来定义和训练模型,如下所示:
我按照教程中的方法训练了 GRU-Encoder-Decoder 模型,当我想使用它来预测序列时,使用这个调整后的 predict_sequence 函数:
但是在这个函数中,该行
yhat, h, = infdec.predict([target_seq] + state)
会产生错误。
作为如何调整代码以使其与 GRU 一起使用的参考,我使用了 Keras 的本指南。
deep-learning - 多层 RNN 的隐藏层的输入是什么
这个问题很清楚。只有一个部分我还不知道答案……在本文的图 1 中,深层的输入是相同的输入(即 x[t])还是前一层的输出?
一个非常简单的表达问题的方法是在论文的图 1 中,是红线越过每一层,还是前一层的输出。
我认为所有层在时间 t 的输入是 x[t] 因为如果它是前一层的输出并且 x[t] 与 h[t] 的维度不同,那么你需要所有隐藏的 GRU单元格为 t 输入接受不同的维度(即第一层将接受隐藏状态和输入,但所有后续层将接受来自 t-1 的相应隐藏状态以及来自前一层的隐藏状态)。
但话又说回来,在我的一个课程中,TA 有一个解决方案,假设 x[t] 和 h[t] 是相同的维度,因此对于后续层,他传递了前面的层输入......这看起来不像一般情况下会这样。
可能 tensorflow 和 pytorch 源代码会提供明确的答案?
python - 我的 GRU 模型上的 val_accuracy 没有增加,如何提高呢?
我正在尝试使用来自Physionet/Apnea-ECG 的数据集构建 GRU 模型来预测阻塞性睡眠呼吸暂停,这里是我的代码:
结果在这里
如果我在这个模型中添加注意力层,它会改善结果吗?如果添加注意力层会提高准确性/模型,如何添加层?请有人帮我改进这个模型
pytorch - PyTorch:GRU,一对多/多对一
我想实现一个 GRU 能够将向量序列编码为一个向量(多对一),然后另一个 GRU 能够将向量解码为向量序列(一对多)。向量的大小不会改变。我想对我实施的内容发表意见。
这是代码:
我不确定这是否是进行一对多 GRU 的好方法。我可以对此发表一些意见吗?
谢谢阅读!
pytorch - GRU 层中的计算是如何进行的
所以我想准确了解 GRU 单元的输出和隐藏状态是如何计算的。
我从这里获得了预训练模型,GRU 层被定义为nn.GRU(96, 96, bias=True)
.
我查看了PyTorch 文档并将权重和偏差的尺寸确认为:
weight_ih_l0
:(288, 96)
weight_hh_l0
:(288, 96)
bias_ih_l0
:(288)
bias_hh_l0
:(288)
我的输入大小和输出大小是(1000, 8, 96)
. 我知道有1000
张量,每个张量 size (8, 96)
。隐藏状态是(1, 8, 96)
,它是大小的一个张量(8, 96)
。
我还打印了变量batch_first
,发现它是False
. 这意味着:
- 序列长度:
L=1000
- 批量大小:
B=8
- 输入尺寸:
Hin=96
现在按照文档中的方程式,对于重置门,我需要将权重乘以输入x
。但是我的权重是二维的,我的输入是三个维度的。
这是我尝试过的,我(8, 96)
从输入中取出第一个矩阵并将其与权重矩阵的转置相乘:
然后我通过复制(288)
八次来添加偏差(8, 288)
。这将给出r(t)
as的大小(8, 288)
。同样,z(t)
也会是(8, 288)
。
这r(t)
用于n(t)
,因为使用了 Hadamard 产品,所以要相乘的两个矩阵的大小必须相同(8, 288)
。这意味着n(t)
也是(8, 288)
。
最后,h(t)
是 Hadamard 产生和矩阵加法,这将给出h(t)
as (8, 288)
which is wrong的大小。
在这个过程中我哪里出错了?
python-3.x - 具有 2x2 输入的双向 GRU
我正在构建一个网络,它将字符串拆分为单词,将单词拆分为字符,嵌入每个字符,然后通过将字符聚合为单词并将单词聚合为字符串来计算该字符串的向量表示。使用双向 gru 层执行聚合并注意。
为了测试这个东西,假设我对这个字符串中的 5 个单词和 5 个字符感兴趣。在这种情况下,我的转变是:
接下来我有一个嵌入层,它将每个字符变成一个长度为 6 的嵌入向量。所以我的特征变成了一个 5x5x6 矩阵。然后我将此输出传递给双向 gru 层并执行一些其他操作,这些操作在这种情况下并不重要,我相信。
问题是当我用迭代器运行它时,比如
它似乎工作得很好(字符串是从 5x5 的切片创建的 tf 数据集),所以它是一堆 5 x 5 矩阵。
但是,当我转到训练或使用预测等功能在数据集级别工作时,模型会失败:
据我从文档中了解到,双向层将 3d 张量作为输入:[batch, timesteps, feature],因此在这种情况下,我的输入形状应如下所示:[batch_size,timesteps,(5,5,6)]
所以问题是我应该对输入数据应用哪种转换来获得这种形状?
pytorch - 在pytorch中模仿keras时间分布层的正确方法是什么?
我试图在 PyTorch 中模仿 TimeDistributed,就像 keras TimeDistributed 一样。请看下面的模型
测试(使用 torchsummary(来自 torchsummary 导入摘要)):
模型 = CNN_GRU(3,64).to('cuda')
摘要(模型,输入大小=(125、1、3、16、16))
输出片段:
==================================================== ==============
总参数:59,758,160可训练参数
:59,758,160
不可训练参数:0
---------------------- ------------------------------------------
输入大小(MB):0.37
向前/backward pass size (MB): 34.15
Params size (MB): 227.96
Estimated Total Size (MB): 262.48
-------------------------- --------------------------------------
全输出:
我已经使用 torchsymmary 测试了上述模型。它比具有相同参数的 keras TimeDistributed 模型具有更多的可训练参数。我不明白我做错了什么。那么模仿 TimeDistributed 的正确方法是什么?如果有任何其他可能的方式,那么给出一些分数将是很高兴的。
tensorflow - 将 GRU 层从 PyTorch 转换为 TensorFlow
我正在尝试将以下 GRU 层从 PyTorch(1.9.1) 转换为 TensorFlow(2.6.0):
我不确定我当前的实现,尤其是关于参数的转换bidirectional
和num_layers
. 我目前的重建如下:
我错过了什么吗?提前感谢您的帮助!