问题标签 [recurrent-neural-network]

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.

0 投票
3 回答
1825 浏览

tensorflow - 如何将最后一个输出 y(t-1) 作为输入以在 tensorflow RNN 中生成 y(t)?

我想在 Tensorflow 中设计一个单层 RNN,以便最后一个输出(y(t-1))参与更新隐藏状态。

如何将最后一个输入y(t - 1)作为更新隐藏状态的输入?

0 投票
1 回答
1238 浏览

tensorflow - 在 Tensorflow 中生成特殊输出词后如何停止 RNN?

我想为序列到序列的学习实现一个编码器-解码器模型。

编码器逐字读取输入序列并更新其隐藏状态。

解码器使用编码器的隐藏状态来初始化其隐藏状态。然后根据最后生成的输出 (y(t-1)) 及其隐藏状态生成输出。我想在生成特殊输出 () 时停止此过程。事实上,我希望能够生成不同长度的输出。我如何在 Tensorflow 中做到这一点?

0 投票
1 回答
690 浏览

matlab - 在 CNN,我怎么能决定不。输入图像和第一个隐藏层之间的特征映射等等?

我有 MxN RGB 图像。所以这里没有。颜色通道数将为 3(r,g,b)。现在我想构建一个 CNN 模型。所以没有神经元输入神经元将是 MxN。让我们有 nxn 感受野。所以第一个隐藏层中的神经元没有将是 (M-n+1)x(M-n+1)。所以我的问题是:

  1. 我怎么能决定不。输入图像和第一个隐藏层之间的特征映射等等?
  2. 特征图如何与特征通道连接?它们在特征通道和颜色通道之间有什么关系吗?

我是 CNN 的新手。接受任何类型的回复。

0 投票
3 回答
5481 浏览

machine-learning - 如何确定 seq2seq tensorflow RNN 训练模型的最大批量大小

目前,我使用默认的 64 作为 seq2seq tensorflow 模型的批量大小。我可以使用具有 12 GB RAM 和 Haswell-E xeon 128GB RAM 的单个 Titan X GPU 的最大批量大小、层大小等是多少。输入数据被转换为嵌入。以下是我正在使用的一些有用参数,似乎单元格输入大小为 1024:

那么根据我的硬件,我可以去的最大批量大小、层数、输入大小是多少?目前 GPU 显示 99% 的内存已被占用。

0 投票
1 回答
276 浏览

python - 在 N 次损失计算后在 Theano 中计算更新

我使用 lasagne 构建了一个 LSTM 循环 NNet ,该NNet大致基于此博客文章中的架构。我的输入是一个包含大约 1,000,000 个句子和 2,000 个单词标记的词汇表的文本文件。通常,当我构建图像识别网络时,我的输入层将如下所示:

(其中尺寸是批量大小、通道、高度和宽度)这很方便,因为所有图像的大小都相同,所以我可以批量处理它们。由于我的 LSTM 网络中的每个实例都有不同的句子长度,我有一个如下所示的输入层:

如上面引用的博客文章所述,

掩码
因为并非每个小批量中的所有序列都始终具有相同的长度,所以千层面中的所有循环层都接受一个单独的掩码输入,其形状为 (batch_size, n_time_steps) ,其填充使得掩码 [i, j] = 1 当 j <= (序列 i 的长度) 和 mask[i, j] = 0 当 j > (序列 i 的长度) 。当没有提供掩码时,假设小批量中的所有序列的长度为 n_time_steps。

我的问题是:有没有办法在使用掩码的情况下小批量处理这种类型的网络?


这是我的网络的简化版本。

从那里我有生成(X, y)对的生成器,我正在计算train(X, y)和更新每次迭代的梯度。我想做的是做N个训练步骤,然后用平均梯度更新参数。

为此,我尝试创建一个compute_gradient函数:

然后循环几个训练实例以创建一个“批处理”并将梯度计算收集到一个列表中:

这会产生一个列表列表

从这里我需要在每一层取梯度的平均值,然后更新模型参数。这可以像这样分批完成,梯度计算/参数更新是否需要在一个 theano 函数中全部发生?

谢谢。

0 投票
1 回答
90 浏览

python-2.7 - RNN 的状态归一化

也许一个更好地提出给计算机科学或交叉验证的问题?


我开始在任意长度的序列上使用 LSTM 进行一些工作,我遇到的一个问题是我没有看到解决的问题是,我的网络似乎已经开发了几个线性增长的参数(也许作为时间的度量?)。

一个明显的问题是训练数据以一个长度序列为界,x因此网络会合理地增长这个参数直到 tilmestep x。但在那之后,网络最终将成为 NAN,因为值变得过于极端。

有没有人读过有关随着时间的推移状态稳定正常化的任何内容?

任何建议将不胜感激。

0 投票
1 回答
1750 浏览

python - TensorFlow:执行此损失计算

我的问题和问题在两个代码块下面说明。


损失函数


被用于

我试图扁平化我的代码,以便一切都发生在一个地方。如果有错别字/混淆点,请告诉我。


我的问题

问题是这正在返回错误:

所以我假设这是 TensorFlow 抱怨它无法计算我的损失的梯度,因为损失是由 numpy 执行的,超出了 TF 的范围。

所以很自然地要解决这个问题,我会尝试在 TensorFlow 中实现它。问题是,我的logit_lengthslabel_lengths都是张量,所以当我尝试访问单个元素时,我会返回一个形状为 [] 的张量。当我尝试使用tf.nn.top_k()它的Int参数k时,这是一个问题。

另一个问题是我label_lengths的占位符,因为我的loss值需要在optimizer.minimize(loss)调用之前定义,我也收到一个错误,说需要为占位符传递一个值。

我只是想知道如何尝试实现这个损失函数。或者,如果我遗漏了一些明显的东西。


编辑:经过进一步阅读,我发现通常像我描述的损失一样用于验证和训练替代损失,该损失在与使用真实损失相同的位置最小化。有谁知道像我这样的基于编辑距离的场景使用什么替代损失?

0 投票
0 回答
172 浏览

r - 如何在 R 的神经网络训练中将时间序列作为特征本身提供?

我同时使用NeuralNetNNEt 进行时间序列分类。

这是一个可重现的例子。让我们假设前五列是时间序列的值,最后是标签。我知道我可以使用最大值、最小值、标准偏差、峰值数量等功能,但有没有办法我也可以使用时间序列本身作为功能?

请注意,我在时间序列中有大量数据和大量数据点,因此我知道模型的效率。有没有办法将向量(时间序列)作为特征本身包含在内?

0 投票
1 回答
235 浏览

python - 循环层的奇怪梯度结果

我一直在尝试非常基本的循环网络,并且看到了非常奇怪的行为。我花了很多时间试图缩小出错的范围,最终发现使用循环层时,theano 计算的梯度和有限微分计算的梯度完全不同。这里发生了什么?

这是我遇到的问题:

我有 n_seq 个维度为 n_feat 的 n_steps 特征向量序列,以及它们在 n_class 类中的标签。标签是每个时间步长,而不是每个序列(所以我有 n_seq*n_steps 个标签)。我的目标是训练一个模型来正确分类特征向量。

这是我的最小示例:

(实际上,数据中会有一些顺序信息,因此循环网络应该做得更好,但在这个最小的示例中,我生成纯随机数据,这足以暴露错误。)

我创建了 2 个最小网络:

1) 常规前馈(非循环),只有输入层和带有 softmax 的输出层(无隐藏层)。我通过考虑 n_seq*n_steps “独立”特征向量的“批次”来丢弃顺序信息。

2)一个相同的网络,但输出层是循环的。现在批次的大小为 n_seq,每个输入都是 n_steps 特征向量的完整序列。最后,我将输出重新整形为大小为 n_seq*n_steps 的“批次”。

如果循环权重设置为 0,则 2 个网络应该是等价的。事实上,我确实看到在这种情况下,两个网络的初始损失是相同的,无论我对前馈权重进行什么随机初始化。如果我实现有限微分,我也会得到前馈权重的(初始)梯度是相同的(因为它们应该是相同的)。然而,从 theano 获得的梯度完全不同(但仅适用于循环网络)。

这是我的代码示例结果:

注意:第一次运行时,我收到此警告,我不知道是什么触发了它,但我敢打赌它与我的问题有关。警告:在严格模式下,所有必需的共享变量必须作为 non_sequences 的一部分传递'必须作为 non_sequences 的一部分传递',警告)

任何见解将不胜感激!

代码:

结果:

0 投票
1 回答
1154 浏览

sequence - 使用 TensorFlow RNN 的增量连续时间序列

我想提供时间序列数据 - 一次一步,以增量构建 rnn(经过几个初始步骤)。

目前 rnn() 将 encoder_input 和 decoder_input 作为完整序列。

是否可以一次输入decoder_input 而不是整个序列,因为这就是数据实时出现的方式?