问题标签 [lstm]

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 投票
0 回答
834 浏览

java - 股市到 LSTM

我已经完成了用 LSTM 神经网络预测股市的代码。我在从神经网络提供和接收数据时遇到问题。我有小批量,每个小批量有两个数组:输入价格和理想输出。在输入价格下,我的意思是它有“n”个刻度,在输出理想下,我的意思是随机指标,它有很长的周期,偏移=-100。即,NN 出现在“概率”神经网络中。

好吧,我有 1000 个刻度数据的历史记录。配置:minibatch = 1,input = 1(上面我称之为“'n' ticks”),output = 1。

一旦我训练了一个神经网络,从 [0; 1000) 报价仅在神经网络 [0, 900) 上提供服务,因为指标数据已经结束。如何获得最后一次报价的预测?只需忽略区间 [900, 1000) 并立即应用最后一个(第 1000 个)刻度??

minibatch 的数组通过这种形式计算:

for(i=0, i<minibatch_size, i=i+1) input[i] = if (i>0) tick[i]-tick[i-1]; else 0; ideal[0] = indicator[batch_size-1];

NN 使用输入和输出层的 tanh。

我需要将输入增加到 100 或输出增加到 100?如何避免这种情况?

在 imgur.com 上查看图片

0 投票
1 回答
5243 浏览

python - LSTM 网络张量流的输入

我有一个长度为 t (x0, ...,xt) 的时间序列,每个 xi 都是一个 d 维向量,即 xi=(x0i, x1i, ...., xdi)。因此我的输入 X 的形状为 [batch_size, d]

张量流 LSTM 的输入应该是大小 [batchSize, hidden_​​size]。我的问题是我应该如何将我的时间序列输入到 LSTM。我想到的一种可能的解决方案是增加大小为 [d,hidden_​​size] 的权重矩阵 W,并使用 X*W + B 输入 LSTM。

这是正确的还是我应该在网络上输入其他内容?

谢谢

0 投票
4 回答
38235 浏览

deep-learning - 如何使用 Keras 实现深度双向 LSTM?

我正在尝试实现基于 LSTM 的语音识别器。到目前为止,我可以按照 Merge 层中的示例设置双向 LSTM(我认为它作为双向 LSTM 工作)。现在我想用另一个双向 LSTM 层来尝试它,这使它成为一个深度双向 LSTM。但我无法弄清楚如何将先前合并的两层的输出连接到第二组 LSTM 层中。我不知道 Keras 是否可行。希望有人可以帮助我。

我的单层双向 LSTM 的代码如下

我的 x 和 y 值的尺寸如下。

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 回答
2326 浏览

tensorflow - 带有窥视孔的 LSTM 实现

我一直在阅读有关 LSTM 的论文并检查它的实现。有一点我不清楚。
在大多数论文中都提到从单元到门向量的权重矩阵应该是对角线(例如:Alex第 5 页,2013 年),但我在任何实现中都没有看到这一点。
例如:
1 2 另一个例子来自 mila lab。 3

这些人执行错误还是我遗漏了什么?

0 投票
1 回答
6053 浏览

python - Python keras如何将卷积层转换为lstm层后的输入大小

我对卷积层和 lstm 层之间的连接有疑问。数据的形状为 (75,5),其中每个时间步有 75 个时间步 x 5 个数据点。我想做的是对(75x5)进行卷积,获取新的卷积(75x5)数据并将该数据输入 lstm 层。但是,它不起作用,因为卷积层的输出形状具有我不需要的过滤器数量。因此卷积层输出的形状为 (1,75,5),lstm 层所需的输入为 (75,5)。我如何只取第一个过滤器。

这是出现的错误:

0 投票
1 回答
999 浏览

python - 用于噪声序列的 TensorFlow LSTM

我试图用 tensorflow LSTM 解决原始 LSTM 论文中描述的实验 3a:http: //deeplearning.cs.cmu.edu/pdfs/Hochreiter97_lstm.pdf 并且失败了

来自论文:任务是观察然后对输入序列进行分类。有两个类别,每个类别发生的概率为 0.5。只有一根输入线。只有前 N 个实值序列元素传达有关该类的相关信息。位置 t > N 的序列元素由均值为零且方差为 0.2 的高斯生成。

他在论文中描述的网络架构:“我们使用 3 层网络,具有 1 个输入单元、1 个输出单元和 3 个大小为 1 的单元块。输出层仅接收来自存储单元的连接。存储单元和门单元从输入单元、记忆单元和门单元接收输入,并具有偏置权重。门单元和输出单元在 [0; 1] 中为逻辑 sigmoid,在 [-1; 1] 中为 h,在 [-2; 2] 中为 g "

我尝试使用具有 3 个隐藏单元 T=100 和 N=3 的 LSTM 重现它,但失败了。

我使用了原始论文中描述的在线训练(即在每个序列之后更新权重)

我的代码的核心如下:

准备输入

使用最后一个输出

知道为什么它不能学习吗?

我的第一直觉是为每个类创建 2 个输出,但在论文中他特别提到了一个输出单元。

谢谢

0 投票
1 回答
90 浏览

python-2.7 - RNN 的状态归一化

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


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

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

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

任何建议将不胜感激。

0 投票
1 回答
589 浏览

python - 使用 Keras 编译 LSTM 时出现断言错误

我有以下代码:

但是每次我运行它时,我都会在该行出现错误

其中指出:

有谁知道那是什么意思?

0 投票
2 回答
1011 浏览

machine-learning - (双向)RNN 用于简单的文本分类

TL;DR:双向 RNN 对简单的文本分类有用吗?填充是邪恶的吗?

在我最近的工作中,我为同一任务创建了一个 LSTM 模型和一个 BLSTM 模型,即文本分类。LSTM 模型做得很好,但我决定试一试 BLSTM,看看它是否可以进一步提高准确性。最后,我发现 BLSTM 的收敛速度要慢得多,而且令人惊讶的是,它过拟合了,尽管我以 50% 的概率应用了 dropout。

在实现中,我对 LSTM 和 BLSTM 都使用了展开的 RNN,期望更快的训练。为了满足要求,我手动将输入文本填充到固定长度。

假设我们有一个句子“我早上睡得很晚,错过了对 Nebuchadnezzar 的采访”,然后在转换为预训练词嵌入的索引数组时在其末尾填充 0。所以我们得到类似 [21, 43, 25, 64, 43, 25, 6, 234, 23, 0, 0, 29, 0, 0, 0, ..., 0]。请注意,“th”(应该是“the”)是一个错字,而且“Nebuchadnezzar”这个名字太少见了,所以它们都没有出现在词汇表中,所以我们也用 0 替换它,这对应于一个特殊的完整 -零词向量。

以下是我的反思:

  1. 有些人喜欢在将语料库输入 GloVe 或 Word2Vec 模型之前,将未知单词转换为特殊单词,如“< unk >”。这是否意味着我们必须首先构建词汇并将一些低频单词(根据Min计数设置)更改为“”,然后才能在培训前?是不是比在训练 RNN 的时候把未知词变成 0 或者只是去掉它们更好?

  2. 就我而言,输入 LSTM 或 BLSTM 网络的尾随 0 会使输出混乱。尽管没有来自外部的新信息,但单元状态仍会在随后的每个时间步中更新,因此最终单元的输出将受到长尾随 0 的严重影响。并且我相信,BLSTM 会受到更大的影响,因为它还会以相反的顺序处理文本,例如 [0, 0, 0, ..., 0, 321, 231],特别是如果我们设置初始忘记门到 1.0 以在开始时培养记忆。我看到很多人使用填充,但是如果文本被填充到很长的长度并且在 BLSTM 的情况下会不会造成灾难?

对这些问题有任何想法吗?:-o