问题标签 [rnn]
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 或 keras 相关。假设你想训练一个语言模型,并且你想为你的 LSTM 使用不同大小的输入。特别是,我正在关注这篇论文:https ://www.researchgate.net/publication/317379370_A_Neural_Language_Model_for_Query_Auto-Completion 。
除其他外,作者使用词嵌入和字符的单热编码。最有可能的是,这些输入中的每一个的维度都不同。现在,为了将其输入网络,我看到了一些替代方案,但我确定我遗漏了一些东西,我想知道应该如何完成。
- 创建一个形状的 3D 张量(instances, 2, max(embeddings,characters))。也就是说,用 0 填充较小的输入。
- 创建一个形状的 3D 张量(实例、嵌入+字符、1))。也就是说,连接输入。
在我看来,这两种选择都不利于有效地训练模型。那么,解决这个问题的最佳方法是什么?我看到作者为此目的使用了嵌入层,但从技术上讲,这意味着什么?
编辑
这里有更多细节。我们将这些输入称为 X(字符级输入)和 E(字级输入)。在序列(文本)的每个字符上,我计算 x、e 和 y,即标签。
x
: 字符 one-hot 编码。我的字符索引大小为 38,所以这是一个用 37 个零和一个 1 填充的向量。e
:预先计算的 200 维的词嵌入。如果字符是空格,我获取序列中前一个词的词嵌入,否则,我为不完整的词分配向量 (INC
,大小也是 200)。带有“红色汽车”序列的真实示例:r>INC, e>INC, d>INC, _>embeddings["red"], c>INC, a>INC, r>INC
.y
:要预测的标签,即下一个字符,one-hot 编码。此输出具有相同的维度,x
因为它使用相同的字符索引。在上面的示例中,对于“r”,y
是“e”的 one-hot 编码。
nlp - keras 中 CNN 和 RNN 模型的集成
尝试从论文Ensemble Application of Convolutional and Recurrent Neural Networks for Multi-label Text Categorization in keras中实现模型
我有代码
我不知道我是否在上图中正确设置了文本特征向量!我试过了,我得到了错误
我确实遵循了关于在keras 文档和代码中指定 RNN 初始状态的注释部分
任何帮助表示赞赏。
更新: 建议和更多阅读模型看起来像这样的代码
模型摘要
machine-learning - 可视化 RNN/LSTM
我是循环神经网络和 LSTM 的新手。我对他们的工作和培训程序有很好的了解。但是我很难将它们可视化,尤其是在阅读了 Tensorflow 文档并理解了相关术语之后。在构建 LSTM 时,所有隐藏层单元都是 LSTM 单元吗?我的意思是,如果我在隐藏层中有 100 个单元,是否意味着有 100 个 LSTM 单元?
time-series - LSTM 结果似乎向后移动了一个时间段
使用 LSTM 和 Keras,我构建了一个简单的时间序列预测模型,其工作原理如下:假设我有过去 10 个时间段的数据(标准化并准备好训练),该模型可以预测前两个时间段的值。
我的数据形状类似于:
X = [[[1,2,3,4,5,6,7,8,9,10],[2,3,4,5,6,7,8,9,10,11],[3 ,4,5,6,7,8,9,10,11,12]]]
Y = [[11,12],[12,13],[14,15]]
该模型由一个具有 rnn_size 个节点的 LSTM 层和一个 dropout 层组成。
问题是时间段 t+1 的预测值(如图所示)似乎与时间段 t 的值略有不同。
这是(正常)行为吗?如果没有,我该如何克服它?
我认为我对 LSTM 的工作原理有一个相对较好的理解,但是我无法解决这个特定的问题。
编辑1:
我编辑了代码以使用无状态网络配置,并按照 Daniel 的建议编辑了形状。然而问题依然存在。奇怪的是,验证损失(MSE)总是低于训练损失。
编辑2:
根据Marcin 的要求添加的其余代码
machine-learning - Keras 简单的 RNN 实现
我在尝试用一个循环层编译网络时发现了问题。似乎第一层的维度存在一些问题,因此我对 RNN 层在 Keras 中的工作方式的理解。
我的代码示例是:
错误是
无论input_dim
值如何,都会返回此错误。我错过了什么?
python - 如何将数据馈送到 TensorFlow 中的 LSTM 单元以进行多类分类?
我有一个单行句子的数据集,每个句子都属于基于上下文的类。我创建了一个重要单词的词典,并将输入数据转换为特征列表,其中每个特征都是词典长度的向量。我想将此数据输入到动态 LSTM 单元中,但不知道如何重塑它。考虑我的 batch_size = 100,length_lexicon = 64,nRows_Input = 1000
deep-learning - 为 Keras 有状态 RNN 训练准备可变长度数据的正确方法
我正在训练 Keras RNN 来生成文章。在培训期间,我会提供长度可变的文章。使用无状态 RNN 一切都很好。
我想尝试训练 Keras stateFUL RNN,但 Keras 中的有状态 RNN 需要长度与批量大小成正比的输入和输出,所以如果我将批量大小设置为例如 256,那么我如何输入长度为 100、200 的文章, 350等?
我可以连接几篇文章,但即使它们的长度大于batch_size,如果连接的文章长度仍然与批量大小不成比例,我也需要以某种方式填充输入和输出。正确的方法是什么?
现在我只是用一些占位符填充文章,如下所示:
但我担心模型会从这些“尾巴”中学到毫无意义的东西。可以吗,还是我应该做点别的?
(我没有串联很多文章,因为我担心模型会尝试学习它们之间不存在的依赖关系,如果我没有在输入太多它们之间重置状态)
tensorflow - TensorFlow seq2seq
tensorflow 的 tf.contrib.legacy_seq2seq.basic_rnn_seq2seq 的 api doc 说:
其中,
encoder_inputs:二维张量列表 [batch_size x input_size]。
解码器输入:二维张量列表 [batch_size x input_size]。
问题 1:为什么编码器输入和解码器输入的序列大小 (input_size) 相同。就我而言,存在不等长度的 seq - to - seq 映射。例如,“你在做什么”(长度 4)->“wie gehts(长度 2)”。使用这个 tensorflow 模块时是否需要填充和制作等长的序列?
问题 2:如果我使用
输出的大小(batch_size x 128 [lstm 中隐藏单元的数量])真的让我感到困惑。它不应该等于(batch_size x output_size)吗?我在这里想念什么?我真的很困惑解码器如何在这里工作。
machine-learning - 当某些数据点为 0 时,在给定时间跨度内处理百分比变化的最佳实践?
我有一个数据集,其中一些数据点为 0,我正在尝试处理它,以便每个数据点与前一个点相比变化百分比。问题是其中一些点的值为 0,因此有时计算从前一个数据点 0 的百分比变化会导致当前数据点等于无穷大。
是否有更好的方法来处理百分比变化,或者循环神经网络可以使用无穷大作为其一些数据点吗?
我将这些数据输入到由 Keras 支持的循环神经网络中。
python - 无法为自定义循环架构子类化 Tensorflow RNNCell
我正在尝试将 RNNCell 子类化为自定义循环模型,但出现以下错误
子类具有以下结构
在另一个文件中,我使用它如下:
我的猜测是 dynamic_rnn 无法识别 CSCell 子类化,但我无法理解原因。我使用 TensorFlow 1.2 版。我被卡住了,任何方向都非常感谢。