问题标签 [feed-forward]
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.
neural-network - 反向传播神经网络,层中神经元过多导致输出过高
拥有大量输入的神经网络会导致我的网络问题,例如
神经网络卡住了,前馈计算总是给出 1.0 的输出,因为输出总和太大,在进行反向传播时,梯度总和会太高,导致学习速度太快。
神经网络在所有层中都使用 tanh 作为主动函数。经过深思熟虑,我想出了以下解决方案:
- 初始化较小的随机权重值( WeightRandom / PreviousLayerNeuronCount )
或者
- 在计算输出或梯度的总和后,将总和除以“用于输出和的前一层中的神经元数量”和“用于梯度和的下一层中的神经元数量”,然后将总和传递给激活/导数函数。
我对自己提出的解决方案感到不舒服。
解决方案 1. 没有完全解决问题。梯度或输出总和变高的可能性仍然存在。解决方案 2. 似乎可以解决问题,但我担心它会以一种可能不再解决某些问题的方式彻底改变网络行为。
在这种情况下,你会建议我什么,记住减少层中的神经元数量不是一种选择?
提前致谢!
neural-network - 如何提高前馈网络作为 q 值函数逼近器的性能?
我正在尝试通过使用 Q-Learning + 前馈神经网络作为 q 函数逼近器来导航* n gridworld 域中的代理。基本上,代理应该找到到达某个终端目标位置的最佳/最短方式(+10 奖励)。代理采取的每一步都会获得 -1 奖励。在网格世界中,代理也应该避免一些位置(-10 奖励,终端状态)。
到目前为止,我实现了一个 Q 学习算法,它将所有 Q 值保存在 Q 表中,并且代理表现良好。在下一步中,我想用神经网络替换 Q 表,在代理的每一步之后在线训练。我尝试了一个带有一个隐藏层和四个输出的前馈神经网络,代表网格世界(北、南、东、西)中可能动作的 Q 值。作为输入,我使用了一个 nxn 零矩阵,它在代理的当前位置有一个“1”。
为了达到我的目标,我试图从头开始解决问题:
使用标准 Q-Learning 探索网格世界,并在 Q-Learning 完成后使用 Q-map 作为网络的训练数据 --> 工作正常
使用 Q-Learning 并提供 Q-map 的更新作为 NN (batchSize = 1) 的训练数据 --> 效果很好
用 NN 完全替换 Q-Map。(这就是重点,当它变得有趣时!)
-> FIRST MAP:4 x 4 如上所述,我有 16 个“离散”输入,4 个输出,并且它在隐藏层中与 8 个神经元(relu)一起工作得很好(学习率:0.05)。我使用了一个带有 epsilon 的贪婪策略,在 60 集内从 1 减少到 0.1。 此处显示了测试场景。将标准 qlearning 与 q-map 和“神经”qlearning 之间的性能进行比较(在这种情况下,我使用了 8 个神经元和不同的 dropOut 率)。
总结一下:神经 Q-learning 对小网格效果很好,性能还可以而且可靠。
-> 更大的地图:10 x 10
现在我尝试将神经网络用于更大的地图。起初我尝试了这个简单的案例。
在我的例子中,神经网络如下所示:100 个输入;4个输出;一个隐藏层中大约有 30 个神经元(relu);我再次对贪婪策略使用了递减的探索因子;超过 200 集学习率从 0.1 降低到 0.015 以增加稳定性。
首先,我遇到了由离散输入向量引起的单个位置之间的收敛和插值问题。为了解决这个问题,我在向量中添加了一些相邻位置,其值取决于到当前位置的距离。这极大地改善了学习,政策也变得更好。上图显示了 24 个神经元的性能。
总结:简单的情况是由网络解决的,但只是需要大量的参数调整(神经元数量、探索因子、学习率)和特殊的输入变换。
现在这是我仍未解决的问题/问题:
(1) 我的网络能够在 10 x 10 的地图中解决非常简单的案例和示例,但由于问题变得有点复杂,它失败了。在很可能失败的情况下,网络没有任何变化来找到正确的策略。在这种情况下,我对任何可以提高性能的想法持开放态度。
(2) 有没有更聪明的方法来转换网络的输入向量?我敢肯定,一方面将相邻位置添加到输入向量可以改善 q 值在地图上的插值,但另一方面会使训练网络的特殊/重要位置变得更加困难。我已经在早期尝试了标准笛卡尔二维输入(x/y),但失败了。
(3) 除了具有反向传播的前馈网络之外,是否还有另一种网络类型,通常使用 q 函数近似产生更好的结果?您是否看过项目,其中 FF-nn 在更大的地图上表现良好?
matlab - Matlab - 前馈网络产生相同的精度与不同的时代值
我正在使用 ANN(前馈网络)。我的训练功能是trainlm
。我还尝试了其他培训功能。我的训练数据集的维度是:InputData : 7x1000
和TargetData : 4x1000
。我将max_fail
参数设置为非常高的值,因此网络可以在所有时期完成/运行。
我有一个问题,当我使用训练函数时trainlm
,每个这样的价值网络都有不同数量的时期(例如 500、1000、2000、5000、10000)给了我相同的结果。
那么,为什么这个网络会发生这种情况?有什么建议么?
neural-network - 如何设置前馈的平均像素?咖啡
我想微调 VGG19,它运行良好。在训练时,我将平均像素减去
现在我需要通过我的微调网络进行前馈。如果我看一下,他们 没有在部署文件中指定平均像素值。
问题:
如何在前馈时提供我的网络平均像素值?
我的前馈代码(加载网络)是
现在我不确定是否mean=(104,117,123)
工作,因为当我查看源代码时,classifier
我通过代码中的注释了解到它只需要ndarray
否则它会给出错误。
如何从输入图像中减去平均像素?
python - 多层前馈网络无法在 TensorFlow 中训练
我从 TensorFlow 教程开始,使用单层前馈神经网络对 mnist 数据集中的图像进行分类。这行得通,我在测试集上得到了 80% 以上。然后我尝试通过在其间添加一个新层来将其修改为多层网络。在此修改之后,我所有训练网络的尝试都失败了。网络的前几次迭代变得更好一些,但随后它停滞在 11.35% 的准确度。
使用 1 个隐藏层的前 20 次迭代:
不管我训练它多久,它都会卡在这里。我试图从 rectified linear units 更改为 softmax,两者都产生相同的结果。我试图将适应度函数更改为 e=(y_true-y)^2。结果相同。
不使用隐藏层的前 20 次迭代:
这是我的代码:
因此,使用此代码它不起作用,但是如果我从
至
然后它工作。我错过了什么?
编辑:现在我让它工作了。需要进行两个更改,首先将权重初始化为随机值而不是零(是的,实际上权重需要不为零,尽管有 relu 函数,但零偏差是可以的)。第二件事对我来说很奇怪:如果我从输出层中删除 softmax 函数,而不是手动应用交叉熵公式,而是使用 softmax_cross_entropy_with_logits(y,y_true) 函数,那么它就可以工作。据我了解,这应该是相同的。以前我也尝试过平方误差的总和,但也没有用。无论如何,下面的代码是有效的。(虽然很丑,但可以工作..)通过 10k 次迭代,它使我在测试集上获得了 93.59% 的准确率,因此在任何方面都不是最优的,但比没有隐藏层的要好。仅 20 次迭代后,它'
neural-network - 前馈 - 神经网络 Keras
对于我在 Keras 中实现的前馈神经网络中的输入,我只是想检查我的理解是否正确。
所以在上面的数据中,它是一个数组中 4 个输入的时间窗口。我的输入层是
batch_size 是 4,理论上当我调用 fit 函数时,该函数会遍历每个 nb_epoch 中的所有这些输入吗?batch_size 是否需要为 4 才能使这个时间窗口起作用?
谢谢约翰
machine-learning - 神经网络字符识别
假设我正在尝试创建一个神经网络来识别简单的 5x5 像素网格上的字符。我只有 6 个可能的字符(符号)-X,+,/,\,|
目前我有一个前馈神经网络 - 有 25 个输入节点、6 个隐藏节点和一个输出节点(介于 0 和 1 之间 - sigmoid)。
输出对应一个符号。如'X' = 0.125
、'+' = 0.275
等'/' = 0.425
。
无论网络的输出(在测试中)是什么,都对应于数字上最接近的任何字符。IE -0.13 = 'X'
输入时,0.1 表示像素完全不着色,0.9 表示完全着色。
在 6 个符号上训练网络后,我通过添加一些噪声对其进行测试。
不幸的是,如果我在“/”中添加一点点噪音,网络就会认为它是“\”。
我想也许这 6 个符号的顺序(即它们对应的数字表示)可能会有所不同。
也许隐藏节点的数量导致了这个问题。
也许我将字符映射到数字的一般概念导致了问题。
任何帮助将不胜感激,以使网络更准确。
matlab - 在神经网络权重矩阵中获取 NaN 值
**我正在尝试在 MATLAB 中开发前馈神经网络。我有一个包含 46998 个样本的 12 个输入和 1 个输出的数据集。我在 Matrix 的最后几行中有一些 NaN 值,因为一些输入是加速度和速度,它们分别比位移小 1 和 2 步。
使用这个当前数据集,我将 w1_grad 和 w2_grad 作为 NaN 矩阵。我尝试使用 `Heave_dataset(isnan(Heave_dataset))=[]; 删除它们,但我的数据集正在转换为 (1*610964) 的列矩阵。
谁能帮我这个 ?
neural-network - 前馈反向传播 ANN 中的权重不变
我正在设计一个具有 22 个输入和 1 个输出(1 或 0)的前馈反向传播 ANN。NN 有 3 层,使用 10 个隐藏神经元。当我运行 NN 时,它只会稍微改变权重,输出的总误差约为 40%。最初,我认为它过拟合/欠拟合,但在我改变了隐藏神经元的数量之后,什么都没有改变。
N 是输入的数量 (22)
M 是隐藏神经元的数量 (10)
这是我用来反向传播的代码
oin 是在放入 sigmoid 函数之前计算的输出
oout 是经过 sigmoid 函数后的输出
这是我用来改变隐藏神经元的代码。
machine-learning - Encog反向传播错误没有改变
网络的总误差在超过 100,000 次迭代中没有改变。输入是 22 个值,输出是单个值。输入数组是[195][22],输出数组是[195][1]。
这段代码有什么问题?