问题标签 [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.
algorithm - 从神经网络中删除孤儿神经元的算法
我正在尝试实现 NEAT(增强拓扑的神经进化)。
我有一个网络连接列表,称为“基因”。神经元 1 和神经元 2 之间的连接是gene.from = neuron1,gene.to = neuron2。
我的任务是从这些基因生成神经网络(神经网络只是从索引到神经元的映射,gene.from 和gene.to 是映射中神经元的键)。
我有numPossibleInputs
输入节点,所以我们首先添加那些(0-numPossibleInputs-1 是输入神经元)。
我有numOutputs
输出节点,所以我们也添加了这些节点。
然后,我们根据它们的“to”连接指数对基因进行排序。
最后,我们根据基因创建隐藏层神经元......由于神经网络是一个映射,我们只需检查连接的 to 或 from 是否已经是一个神经元,否则创建一个新的。该算法可以很好地创建网络。
当进化算法“关闭”某些基因时,问题就出现了(注意gene.enabled
)。例如,考虑以下基因(还有其他基因,但它们被禁用):
2->4
4->4
13->4
0->13
1->13
5->13
我们也有禁用基因,2->5 和 4->13。这些不能在网络中使用,因为它们没有被表达。(这就是为什么我必须每一代都生成一个新的网络,可以添加、启用、禁用基因等)。
这是为了numPossibleInputs ==3
,所以 0 1 和 2 是输入(2 是偏差)。5 是隐藏层节点,因为 5 > 3,但小于 10 + 3 = 13。13 是输出节点,我有numPossibleHidden == 10
10 + 3 = 13 ......只有一个输出。可以这样想象:[输入输入输入隐藏*10输出*1] 3个输入,10个隐藏,1个输出
这是天真生成的网络图片: 简单网络
正如我们所看到的,简化后的网络根本不应该有 4 或 5,因为它们对任何输出都没有影响(在这种情况下只有一个输出,13)。简化后的神经网络将只是 0->13 和 1->13。
我对如何解决这个问题有一些初步的想法:
A. 1. 遍历每个连接并散列gene.from id。这些是神经元 ID,它们是其他东西的输入 2. 填充散列后,再次循环并删除任何带有gene.to 的基因不在散列中(如果它不在散列中,则gene.to 不是其他任何东西的输入哈希)。3. 重复直到我们不删除任何东西
B. 生成朴素网络……然后,在网络中向后爬行,从每个输出开始,直到我们不能再进一步(注意重复循环)。散列我们找到的每个节点。一旦我们的图搜索完成,将我们找到的节点散列与我们基因列表中表达的总节点进行比较。仅在找到的节点的哈希中使用带有神经元的基因并重新构建网络。
我希望根据我的网络表示得到一些关于什么可能是最好的算法的反馈 - 我认为我的 B 比 A 更好,但我希望有一个更优雅的解决方案,不涉及我解析图拓扑。也许我可以通过对连接进行排序(By to,by from)来做一些聪明的事情?
谢谢!
machine-learning - 如何使用神经网络找到子串的主要部分?
我很困惑。是否可以在句子中找到主要单词或子字符串(在训练集的帮助下)。我正在分析职位空缺并尝试构建一个文本主应用程序,这可能会质疑文本中提到的技能。是的,也许这是使用技能字典进行某种全局文本搜索的任务,但我真的很好奇,NN 可以帮忙吗?如您所料,我是 ML 的新手。
python - Tensorflow 中的反向传播
我正在构建一个延时循环模型,我需要知道 TensorFlow 如何以及何时计算其后退步骤。
考虑以下模型和伪代码:
这是此代码可用版本的要点,基于 tensorflow/python/ops/rnn.py
我的问题:
对于未调用单元格的时间步长(即在 T=1 时,调用 unit_0,而其余所有未调用),它们的权重是否更新?我不知道让它们在每个州更新是否是个好主意。细胞本身在步骤中没有接触到任何新数据,所以我担心反向传播可能会导致过度校正。感谢其他人对此的见解。
让我知道是否需要任何澄清。
neural-network - 为什么我们在计算反向传播算法时取传递函数的导数?
取导数背后的概念是什么?有趣的是,为了以某种方式教授一个系统,我们必须调整它的权重。但是为什么我们要使用传递函数的推导来做到这一点。派生中有什么对我们有帮助。我知道导数是给定点的连续函数的斜率,但它与问题有什么关系。
gpgpu - TensorFlow中序列到序列模型的分布式(多设备)实现?
这是一个关于在 TensorFlow 中训练序列到序列模型的非常好的教程。我只是想知道是否有一个分布式版本可以在单台机器上利用一组 GPU 以获得更好的性能?
TensorFlow 白皮书已经提到,可以训练大型多层循环神经网络(参见图 8和“模型并行训练”部分),如使用神经网络的序列到序列学习中使用的那样。有人知道当前的教程是否涵盖模型并行训练吗?如果不是,如何改进原始教程以利用一组 GPU?
neural-network - 如何同时使用 word2vec 和 RNN?
因此,我在 Java 中使用 word2vec,并尝试以某种方式对其进行训练,以便它为我提供单词和句子的向量表示。
我可以使用它来将输入输入神经网络,以根据 word2vec 数据获得响应吗?我打算在这个的帮助下制作一个聊天机器人。
image-processing - 训练卷积神经网络开始时的高训练误差
在卷积神经网络中,我正在训练一个 CNN,在训练过程中,尤其是在训练开始时,我得到了极高的训练误差。之后,此错误开始缓慢下降。在大约 500 个 Epoch 之后,训练误差接近于零(例如 0.006604)。然后,我用最终得到的模型来衡量它对测试数据的准确度,我得到了大约 89.50%。这看起来很正常吗?我的意思是在我的训练过程一开始就获得很高的训练错误率。我想提到的另一件事是,我注意到每次减少隐藏节点的数量时,训练结束时结果都会变得更好。
我的CNN结构是:
以下是我的一些超参数:
非常感谢您在这方面的帮助和建议,在此先感谢您。
random - 如何控制生成权重的随机性?
我正在训练宪法神经网络,每次运行我的模型时,我都会得到不同的训练错误率。在我之前的问题之后,我 发现主要原因是(随机)生成权重的方式,每次训练我的 CNN 时,它都从不同的点开始。所以,我正在寻找一种方法来帮助我控制权重的随机性并每次保持相同的输出。
我上一个问题中的一个人建议使用种子。事实上,我在代码的开头尝试了这段代码,但我不太确定它是否能正常工作。
这是负责随机初始化权重的函数:
如果您能帮我解决这个问题,我将不胜感激。
theano - How do I use Theanets LSTM RNN's on my time series data?
I have a simple dataframe consisting of one column. In that column are 10320 observations (numerical). I'm simulating Time-Series data by inserting the data into a plot with a window of 200 observations each. Here is the code for plotting.
This simulates a flow of real-time data and visualizes it. What I want is to apply theanets RNN LSTM to the data to detect anomalies unsupervised. Because I am doing it unsupervised I don't think that I need to split my data into training and test sets. I haven't found much of anything that makes sense to me so far and have been googling for about 2 hours. Just hoping that you guys may be able to help. I want to put the prediction output of the RNN on the graph as well and define a threshold that, if the error is too large, the values will be identified as anomalous. If you need more information please comment and let me know. Thank you!
python - 循环神经网络中的时代与迭代
我正在查看使用 RNN 和 LSTM 的 Keras 的文本生成示例,但仍然对术语epoch和迭代之间的区别感到困惑。
尽管这是之前的问题,但我无法理解答案,或者这个答案与我的理解不同,也与以下示例的处理方式不同。基于这个答案,据说
一个epoch = 所有训练示例的一次前向传递和一次反向传递
迭代次数=传递次数,每次传递使用 [batch size] 示例数。
示例:如果您有 1000 个训练示例,并且批量大小为 500,则需要 2 次迭代才能完成 1 个 epoch。
总结一下:(#training examples/batch size) = (#iterations/#epochs)
。
但是,据我了解,以下示例与前面的结论不同。
在这里,迭代是60并且epoch的数量设置为1,这让我很困惑。如前所述,似乎有 60次迭代for iteration in range(1, 60)
。并且对于每次迭代,按照每个 for 循环的说明完成一个epoch 。model.fit(X, y, batch_size=128, nb_epoch=1)
再次,这里有一个batch_size=128
. 那么迭代究竟是什么意思呢?
任何人都可以根据这个例子解释迭代和纪元 之间的区别吗?