问题标签 [backpropagation]

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

python - 神经网络,蟒蛇

我正在尝试编写一个简单的神经网络,它可以为 y=x 函数提供权重。这是我的代码: http ://codepad.org/rPdZ7fOz

如您所见,错误级别从未真正下降太多。我尝试改变动量和学习率,但没有太大帮助。我的输入、隐藏和输出数量是否适合我想要做的事情?如果不是,应该是什么?如果是这样,还有什么可能是错的?

0 投票
3 回答
2613 浏览

java - 用于字母识别的神经网络

我正在尝试添加单层神经网络的代码,该网络将位图作为输入,并有 26 个输出用于字母表中每个字母的可能性。

我的第一个问题是关于添加的单个隐藏层。我认为隐藏层只有自己的一组输出值和权重是否正确?它不需要有自己的偏见吗?

我还可以确认我正在正确考虑前馈方面吗?这是一些伪代码:

假设这是正确的,培训会是这样的吗?

提前感谢您的帮助,我已经阅读了很多示例和教程,但我仍然无法确定如何正确执行所有操作。

0 投票
3 回答
5156 浏览

artificial-intelligence - 前馈神经网络训练的有效数据集大小


我使用pybrain实现在 python 中使用前馈神经网络。对于训练,我将使用反向传播算法。我知道对于神经网络,我们需要恰到好处的数据量,以免网络训练不足/过度训练。我可以获得大约 1200 个不同的数据集训练数据模板。
那么问题来了:
如何计算训练的最佳数据量?

由于我已尝试使用数据集中的 500 个项目,并且需要花费数小时才能收敛,因此我宁愿不必尝试太多的大小。结果我们对最后一个尺寸非常好,但我想找到最佳数量。神经网络有大约 7 个输入、3 个隐藏节点和 1 个输出。

0 投票
2 回答
1760 浏览

machine-learning - 神经网络加权

最近我研究了反向传播网络并做了一些手动练习。在那之后,我提出了一个问题(也许没有意义):以下两种不同的替换方法有什么重要的吗: 1. 增量训练:一旦知道所有 delta Wij 并且在呈现之前,权重会立即更新下一个训练向量。2. 批量训练:为每个示例训练向量计算和存储 delta Wij。但是,delta Wij 不会立即用于更新权重。权重更新在训练时期结束时完成。

我已经用谷歌搜索了一段时间,但没有找到任何结果。

0 投票
2 回答
2004 浏览

algorithm - 如何将我的浮点数转换为我的神经网络?

我一直在阅读一些关于神经元、感知器和多层感知器概念的在线教程。现在,我想在我自己的例子中实现这个概念。我想做的是在我的网络中实现以下简单算法:

假设我们有 4 个浮点数minus1, plus1, minus2,plus2

但这是我的担忧:

  1. 如何为我的网络提供以下数字:63.8990、-165.177、1.33001 或 0.98401?

  2. 我应该如何选择输入的数量,因为我有 4 个数字,但我不知道是应该只使用 4 个输入还是先将所有内容转换为位,然后根据相关位数选择输入的数量?

  3. 考虑到 3 种类型的输出 (1,-1,0),我是否应该在输出层中需要 3 个神经元,每个神经元代表一种特定类型的答案,或者我应该训练网络分别学习每种答案(第一个是 1网络,-1 表示第二个,0 表示最后一个)?

预先感谢大家的阅读,非常感谢您的帮助

斯蒂芬妮

0 投票
3 回答
6294 浏览

perl - 多层神经网络不会预测负值

我已经实现了一个多层感知器来预测输入向量的 sin。向量由随机选择的四个 -1,0,1 和设置为 1 的偏差组成。网络应该预测向量内容总和的 sin。

例如输入 = <0,1,-1,0,1> 输出 = Sin(0+1+(-1)+0+1)

我遇到的问题是网络永远不会预测负值,并且许多向量的 sin 值都是负的。它可以完美地预测所有正输出或零输出。我假设更新权重存在问题,每个时期都会更新。有没有人遇到过NN的这个问题?任何帮助都会很棒!

注意:该网络有 5 个输入,1 个隐藏层中的 6 个隐藏单元和 1 个输出。我在激活隐藏层和输出层上使用 sigmoid 函数,并尝试了数吨学习率(目前为 0.1);

0 投票
1 回答
1400 浏览

ruby-on-rails - 红宝石的神经网络

哪些库/插件是设计和创建反向传播神经网络的最佳(快速/有据可查的/等)?谷歌搜索 Ai4r Ai-App

0 投票
3 回答
7320 浏览

neural-network - 基于Java的神经网络——如何实现反向传播

我正在构建一个测试神经网络,它肯定不起作用。我的主要问题是反向传播。根据我的研究,我知道使用 sigmoid 函数很容易。因此,我通过 (1-Output)(Output)(target-Output) 更新每个权重,但问题是如果我的输出为 1 但我的目标不是?如果它在某个时候是 1,那么权重更新将始终为 0...现在我只是想让该死的东西添加来自 2 个输入神经元的输入,因此最佳权重应该只是 1 作为输出神经元只需添加其输入。我确定我在很多地方都搞砸了,但这是我的代码:

好的,这是很多代码,所以请允许我解释一下。网络现在很简单,只有一个输入层和一个输出层 --- 我想稍后添加一个隐藏层,但我现在正在采取婴儿步骤。每一层都是神经元的数组列表。输入神经元加载了输入,在这个例子中是一个 1 和一个 2。这些神经元触发,计算输入的 sigmoid 并将其输出到输出神经元,输出神经元将它们相加并存储值。然后网络通过获取 (answer-output) (output) (1-output)(特定输入神经元的输出) 进行反向传播,并相应地更新权重。很多时候,它循环通过,我得到无穷大,这似乎与负权重或 sigmoid 相关。如果没有发生这种情况,它会收敛到 1,并且由于 (1-output of 1) 为 0,我的权重停止更新。

numCalled 和 totalSignal 值只是让算法在继续之前等待所有神经元输入。我知道我这样做是一种奇怪的方式,但是神经元类有一个称为连接的神经元数组列表来保存它正向连接的神经元。另一个名为 backconns 的数组列表保存反向连接。我也应该更新正确的权重,因为我得到了神经元 i 和 j 之间的所有反向连接,但是在所有神经元 j(i 上面的层)中,我只拉权重 i。我为混乱道歉 --- 我已经尝试了好几个小时,但仍然无法弄清楚。任何帮助是极大的赞赏!

0 投票
2 回答
2311 浏览

neural-network - 具有离散输出的反向传播神经网络

我正在使用三层反向传播网络完成 xor 示例。当输出层具有 sigmoid 激活时,输入 (1,0) 可能会给出 0.99 的期望输出 1,输入 (1,1) 可能会给出 0.01 的期望输出 0。

但是,如果希望输出是离散的(0 或 1)怎么办,我是否只需将阈值设置在 0.5 之间?这个阈值是否需要像任何其他权重一样进行训练?

0 投票
1 回答
3178 浏览

optimization - 进行梯度下降时检查梯度

我正在尝试实现前馈反向传播自动编码器(使用梯度下降进行训练),并想验证我是否正确计算了梯度。本教程建议一次计算每个参数的导数:grad_i(theta) = (J(theta_i+epsilon) - J(theta_i-epsilon)) / (2*epsilon). 我已经在 Matlab 中编写了一段示例代码来执行此操作,但运气不佳 - 从导数计算的梯度与数值发现的梯度之间的差异往往较大(>> 4 个有效数字)。

如果有人可以提供任何建议,我将非常感谢您的帮助(无论是在我计算梯度或如何执行检查方面)。因为我已经大大简化了代码以使其更具可读性,所以我没有包含偏差,并且不再绑定权重矩阵。

首先,我初始化变量:

接下来,给定一些输入图像x,进行前馈传播:

我使用的损失函数是标准的 Σ(0.5*(z - x)^2)):

最后,检查梯度是否正确(在这种情况下,只需对解码器执行此操作):

在 MNIST 数据集(对于第一个条目)上运行它会得到如下结果: