问题标签 [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.
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?如何避免这种情况?
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。
这是正确的还是我应该在网络上输入其他内容?
谢谢
deep-learning - 如何使用 Keras 实现深度双向 LSTM?
我正在尝试实现基于 LSTM 的语音识别器。到目前为止,我可以按照 Merge 层中的示例设置双向 LSTM(我认为它作为双向 LSTM 工作)。现在我想用另一个双向 LSTM 层来尝试它,这使它成为一个深度双向 LSTM。但我无法弄清楚如何将先前合并的两层的输出连接到第二组 LSTM 层中。我不知道 Keras 是否可行。希望有人可以帮助我。
我的单层双向 LSTM 的代码如下
我的 x 和 y 值的尺寸如下。
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 函数中全部发生?
谢谢。
python - Python keras如何将卷积层转换为lstm层后的输入大小
我对卷积层和 lstm 层之间的连接有疑问。数据的形状为 (75,5),其中每个时间步有 75 个时间步 x 5 个数据点。我想做的是对(75x5)进行卷积,获取新的卷积(75x5)数据并将该数据输入 lstm 层。但是,它不起作用,因为卷积层的输出形状具有我不需要的过滤器数量。因此卷积层输出的形状为 (1,75,5),lstm 层所需的输入为 (75,5)。我如何只取第一个过滤器。
这是出现的错误:
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 个输出,但在论文中他特别提到了一个输出单元。
谢谢
python-2.7 - RNN 的状态归一化
也许一个更好地提出给计算机科学或交叉验证的问题?
我开始在任意长度的序列上使用 LSTM 进行一些工作,我遇到的一个问题是我没有看到解决的问题是,我的网络似乎已经开发了几个线性增长的参数(也许作为时间的度量?)。
一个明显的问题是训练数据以一个长度序列为界,x
因此网络会合理地增长这个参数直到 tilmestep x
。但在那之后,网络最终将成为 NAN,因为值变得过于极端。
有没有人读过有关随着时间的推移状态稳定正常化的任何内容?
任何建议将不胜感激。
python - 使用 Keras 编译 LSTM 时出现断言错误
我有以下代码:
但是每次我运行它时,我都会在该行出现错误
其中指出:
有谁知道那是什么意思?
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 替换它,这对应于一个特殊的完整 -零词向量。
以下是我的反思:
有些人喜欢在将语料库输入 GloVe 或 Word2Vec 模型之前,将未知单词转换为特殊单词,如“< unk >”。这是否意味着我们必须首先构建词汇并将一些低频单词(根据Min计数设置)更改为“”,然后才能在培训前?是不是比在训练 RNN 的时候把未知词变成 0 或者只是去掉它们更好?
就我而言,输入 LSTM 或 BLSTM 网络的尾随 0 会使输出混乱。尽管没有来自外部的新信息,但单元状态仍会在随后的每个时间步中更新,因此最终单元的输出将受到长尾随 0 的严重影响。并且我相信,BLSTM 会受到更大的影响,因为它还会以相反的顺序处理文本,例如 [0, 0, 0, ..., 0, 321, 231],特别是如果我们设置初始忘记门到 1.0 以在开始时培养记忆。我看到很多人使用填充,但是如果文本被填充到很长的长度并且在 BLSTM 的情况下会不会造成灾难?
对这些问题有任何想法吗?:-o