问题标签 [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 投票
1 回答
3134 浏览

python - 了解 Tensorflow LSTM 模型输入?

我在理解 TensorFlow 中的 LSTM 模型时遇到了一些麻烦。

我使用tflearn作为包装器,因为它会自动执行所有初始化和其他更高级别的操作。为简单起见,让我们考虑这个示例程序。直到第 42 行net = tflearn.input_data([None, 200])很清楚会发生什么。您将数据集加载到变量中并使其具有标准长度(在本例中为 200)。在这种情况下,输入变量和 2 个类都转换为 one-hot 向量。

LSTM 如何接受输入它预测了多少个样本的输出?

代表什么net = tflearn.embedding(net, input_dim=20000, output_dim=128)

我的目标是复制论文中的活动识别数据集。比如我想输入一个4096向量作为LSTM的输入,思路是取16个这样的向量,然后产生分类结果。我认为代码看起来像这样,但我不知道应该如何给出 LSTM 的输入。

0 投票
1 回答
804 浏览

neural-network - TensorFlow 翻译培训——什么时候停止?

我正在使用来自 Google 的 Tensorflow 的示例。我能够很好地运行它,但训练似乎并没有停止,因为它有一个while True:循环。参考: translate.py

考进train()

0 投票
2 回答
903 浏览

python - 训练每个后续单词时,用于语音识别的张量流 LSTM 减慢速度

所以我正在尝试使用 tensorflows LSTM 来识别口语。然而,在每个训练词通过 LSTM 之后,下一个词需要更长的时间来处理(特别是通过反向传播计算梯度并将其应用于网络)。我目前正在使用不支持 CUDA 的 iMac,因此我必须使用 CPU 而不是 GPU(一旦我能够使用,我将切换到 GPU)。

我正在使用 Python-2.7 进行编程

我使用的词汇量非常小,8 个词类,每个词有 10 个训练示例,每个词都是孤立的(不是句子的一部分,只是一个词)。

每个词都被预处理成梅尔频率倒谱系数,然后使用 Kmeans 对它们进行聚类,K = 100。因此,LSTM 的输入是一次输入一个项目的 float32 列表。

LSTM 中肯定会出现减速,因为从列表中获取每个项目并将其传递给 LSTM 所花费的时间对于每个项目大致保持不变。每次传递给 LSTM 的每个项目的大小也是相同的(更长的单词只是有更长的项目列表);然而,随着训练的继续,即使是更短的单词(列表中的项目更少)仍然需要越来越长的时间。

我正在使用梯度下降和反向传播来训练网络,并尝试将梯度剪裁到 10 个时间步或根本不剪裁,这没有区别。

LSTM 实例化为:

在 LSTM 之后,我有一个 softmax 层;使用交叉焓损失将其输出与表示正确输出的一个热向量进行比较。

管道 sudo 代码:

最后,如果我不清楚我的问题是什么,这里是我网络的时间安排:

如果有人对为什么需要越来越长的时间有任何想法

0 投票
0 回答
555 浏览

python - Tensorflow 中的动态 LSTM - 优化器问题

我在 Tensorflow 中实现了以下 LSTM 类,其中展开操作的灵感来自于 Tensorflow 中的 dynamic_rnn() 实现:

我使用带有一些成本函数的 LSTM 定义了一个图。该图可以正确编译,我可以使用大小为 [sequence_length、batch_size、input_dim] 的“in_batch”进行前向传播。'sequence_length' 对于不同的批次可能会有所不同。但是,当我将优化器(Adam)与成本函数一起使用时,我收到以下错误消息:

这里 1000 是 'dim_x' 而 512 是 4*'dim_h',所以错误是针对 'W_x_h'。我已经尝试在 'lstmUnroll()' 中对 'x_t'、'h_t'、'c_t' 和 'output' 使用 '.set_shape()',但仍然失败。

有什么想法可以让它与优化器一起工作吗?

0 投票
1 回答
772 浏览

neural-network - 我如何实际执行保存的 TensorFlow 模型?

TensorFlow新手在这里。我正在尝试构建一个 RNN。我的输入数据是一组大小的向量实例,instance_size表示每个时间步中一组粒子的 (x,y) 位置。(由于实例已经具有语义内容,它们不需要嵌入。)目标是在下一步学习预测粒子的位置。

按照RNN 教程并稍微修改包含的 RNN 代码,我创建了一个或多或少像这样的模型(省略了一些细节):

然后我创建一个saver = tf.train.Saver(),迭代数据以使用给定的run_epoch()方法训练它,并用saver.save(). 到目前为止,一切都很好。

但是我如何实际使用训练好的模型呢?教程到此停止。从docs on 开始tf.train.Saver.restore(),为了读回变量,我需要设置与保存变量时运行的完全相同的图表,或者有选择地恢复特定变量。无论哪种方式,这意味着我的新模型将需要 size 的输入batch_size x num_steps x instance_size。然而,我现在想要的只是在一个大小的输入上对模型进行一次前向传递,num_steps x instance_size并读出一个instance_size大小的结果(下一个时间步的预测);换句话说,我想创建一个模型,它接受与我训练的张量不同的张量。我可以通过将现有模型传递给我的预期数据来解决它batch_size次,但这似乎不是最佳实践。最好的方法是什么?

0 投票
1 回答
2792 浏览

python - tensorflow/tflearn 输入形状

我正在尝试创建一个 lstm-rnn 来生成音乐序列。训练数据是大小为 4 的向量序列,表示要训练的某些歌曲中每个音符的各种特征(包括 MIDI 音符)。

从我的阅读来看,看起来我正在尝试对每个输入样本进行处理,输出样本是下一个大小为 4 的向量(即,它应该尝试在给定当前音符的情况下预测下一个音符,并且由于LSTM 结合了以前的样本知识)。

我正在使用 tflearn,因为我对 RNN 还是很陌生。我有以下代码

在此代码之前,我将 trainX 和 trainY 拆分为长度为 20 的序列(任意地,但我在某处读到,对这样的序列进行训练是一种很好的方法)。

这似乎很好,但我收到错误 ValueError: Cannot feed value of shape (128, 16, 4) for Tensor u'TargetsData/Y:0',其形状为 '(?, 4)'

SO:到目前为止,我的假设是输入形状 [None, seqLength, 4] 对 TF [batchLength(由 tflearn 顺序输入)、序列长度、样本的特征长度] 说。我不明白为什么它说输出是错误的形状?我是否错误地假设了数据序列拆分?当我只是尝试输入所有数据而不拆分为序列时,输入形状为 [None, 4],TF 告诉我 LSTM 层需要一个至少具有 3 维的输入形状。

我无法理解输入和输出的形状应该是什么。感觉这应该是一件简单的事情——我有一组向量输入序列,我希望网络尝试预测序列中的下一个。很少有在线课程不具备相当高级的知识水平,所以我碰了壁。非常感谢任何人可以提供的任何见解!

0 投票
0 回答
166 浏览

lstm - LSTM 神经网络(Torch)中的梯度

我正在使用https://github.com/wojzaremba/lstm中实现的 LSTM 语言模型

它使用以下 lstm 函数

在以下网络中使用(我删除了 softmax 和标准层,并在代码中的其他地方分别添加了它们)

上述网络返回网络的输出和 lstm 层的状态以用于下一次迭代。对于 2 层 lstm 网络,状态按以下顺序 { cell_1, output_1, cell_2, output_2 } 保存在表中。网络输出和 output_2 相同。

我有两个问题:(1)当我在这个网络上应用前向和后向传播时,状态的梯度是如何排列的?它们的顺序会与上表相同还是会像这样颠倒:{grad_cell_2, grad_output_2, grad_cell_1, grad_output_1}

我最初认为它们的顺序与输出表的顺序相同,但我有理由怀疑顺序颠倒了(基于我手动设置每次迭代的梯度的一些测试)。我不确定,我不知道如何调试这段代码来确切地知道发生了什么。

(2) 在后退步骤中,如果我只知道输出的梯度(与状态表中的最后一个条目相同),我应该传递输出(res)或状态表(next_s)的梯度还是两个都?我认为仅将梯度传递给输出或仅将状态表的最后一个条目传递给我会得到完全相同的结果,因为输出只是表中的最后一个条目。但是,当我尝试两种方式时,我会得到不同的结果。

0 投票
1 回答
1498 浏览

neural-network - 具有稀疏输出的神经网络

我有一个有趣的问题,可以简化为这个简单的任务。考虑一个神经网络(LSTM 或其他),它将学习复制稀疏度约为 1% 的稀疏二进制矩阵。

如果我们看一下仅猜测所有条目的 0 的成本函数,它将是大约 100-% 的稀疏性,因此您只需猜测所有的 0 即可获得非常高的准确度。

有没有办法通过改变稀疏矩阵表示或成本函数来将神经网络从这个巨大的局部最小值中剔除?

谢谢!

0 投票
2 回答
8328 浏览

tensorflow - TensorFlow 使用 LSTM 生成文本

我想使用 tensorflow 生成文本并一直在修改 LSTM 教程(https://www.tensorflow.org/versions/master/tutorials/recurrent/index.html#recurrent-neural-networks)代码来做到这一点,但是我最初的解决方案似乎产生了废话,即使经过很长时间的训练,它也没有改善。我不明白为什么。这个想法是从零矩阵开始,然后一次生成一个单词。

这是代码,我在下面添加了两个函数 https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/models/rnn/ptb/ptb_word_lm.py

生成器如下所示

我已将变量“概率”添加到 ptb_model 中,它只是 logits 上的 softmax。

和抽样:

0 投票
1 回答
952 浏览

python - Keras LSTM 错误

当我尝试从 keras 示例运行 LSTM 文本生成器示例时出现以下错误。

未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:' -目标特征'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-rdseed'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-sha'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:未知参数:'-target-feature'。铿锵声:错误:没有这样的文件或目录:'+cx16'。clang:错误:没有这样的文件或目录:'+xsave'。clang:错误:没有这样的文件或目录:'+bmi2'。铿锵声:错误:语言无法识别:'savec'。clang:错误:没有这样的文件或目录:'+fsgsbase'。铿锵声:错误:没有这样的文件或目录:'+avx'。铿锵声:错误:没有这样的文件或目录:'+rtm'。铿锵声:错误:没有这样的文件或目录:'+popcnt'。铿锵声:错误:没有这样的文件或目录:'+fma'。铿锵声:错误:没有这样的文件或目录:'+bmi'。铿锵声:错误:没有这样的文件或目录:'+aes'。clang:错误:没有这样的文件或目录:'+rdrnd'。铿锵声:错误:语言无法识别:“保存”。clang:错误:没有这样的文件或目录:'+sse4.1'。clang:错误:没有这样的文件或目录:'+sse4.2'。叮当声:错误:没有这样的文件或目录:'+avx2'。clang:错误:没有这样的文件或目录:'+sse'。铿锵声:错误:没有这样的文件或目录:'+lzcnt'。铿锵声:错误:没有这样的文件或目录:'+pclmul'。clang:错误:没有这样的文件或目录:'+f16c'。clang:错误:没有这样的文件或目录:'+ssse3'。clang:错误:没有这样的文件或目录:'+mmx'。铿锵声:错误:没有这样的文件或目录:'+cmov'。铿锵声:错误:语言无法识别:'op'。铿锵声:错误:没有这样的文件或目录:'+movbe'。clang:错误:没有这样的文件或目录:'+hle'。clang:错误:没有这样的文件或目录:'+xsaveopt'。铿锵声:错误:没有这样的文件或目录:'+sse2'。clang:错误:没有这样的文件或目录:'+sse3'。", '[DotModulo(A, s, m, A2, s2, m2)]') 没有这样的文件或目录:'+sse3'。", '[DotModulo(A, s, m, A2, s2, m2)]') 没有这样的文件或目录:'+sse3'。", '[DotModulo(A, s, m, A2, s2, m2)]')

除了将我自己的数据传递给它之外,我没有对代码进行任何更改。这是我的代码。

请帮我。