我为我的工作做了大量的铅笔和纸数学,这可能会让人烦恼并难以跟踪.我有一段时间没有一个有趣的编程项目,所以我想到了一些东西,并想知道它是否存在.
我想创建一个代数操作程序,我可以用鼠标移动方程的各个部分,它立即显示更改,程序是直观的.例如,如果我有(ax ^ 3 + a ^ 2*y ^ 4),我可以拖动括号外的一个,它会知道把它变成一个(x ^ 3 + a*y ^ 4).
需要明确的是:我并不是想通过分析来解决方程式.我知道Mathematica和其他一百万个程序都是这样做的.在我想做的事情上,你仍然在解决它(通常我甚至不是"解决"某些东西本身,只是试图让它变成一种"讨人喜欢的形式".这不是什么东西程序真的可以).
我已经检查过MathCAD,看起来很酷,但仍然不像我在说什么.我也检查了同情(如果我这样做,我最终可能会使用它),但它仍然没有我正在谈论的内容.
那么,有人知道这是否已存在?我想这样做,但我不想重新发明轮子.
谢谢!!
嘿大家,我一直试图让我编码的ANN用于反向传播算法.我已经阅读了几篇关于它们的论文,但我注意到了一些差异.
这似乎是算法的超级通用格式:
但问题在于:显然,权重需要在某个时刻更新.但是,因为我们正在反向传播,所以在计算更靠近输入层的层的误差时,我们需要使用先前层的权重(更靠近输出层的权重,我的意思).但我们已经计算出更接近输出层的层的重量变化!因此,当我们使用这些权重来计算更接近输入的图层的误差时,我们是使用旧值还是"更新值"?
换句话说,如果我们要在我的超级通用算法中更新权重的步骤,它会是:
(立即更新重量)
要么
(使用权重的"旧"值)
在本文中,我读到了两个抽象的例子(基于图3.3和3.4的例子),他们说要使用旧值,而不是立即更新值.但是,在他们的"工作示例3.1"中,他们使用新值(即使他们说他们使用的是旧值)来计算隐藏层的误差.
此外,在我的书"Ethem Alpaydin的机器学习简介"中,虽然有很多抽象的东西我还不了解,但他说"注意第一层权重delta-w_hj的变化,利用了第二层权重v_h.因此,我们应该计算两个层的变化并更新第一层权重,利用第二层权重的旧值,然后更新第二层权重.
说实话,看起来他们只是犯了一个错误,所有的权重都在最后同时更新,但我想确定.我的ANN给了我奇怪的结果,我想要肯定这不是原因.
谁知道?
谢谢!
我试图用反向传播算法制作一个简单的人工神经网络.我已经创建了一个ANN,我相信我已经正确地实现了BP算法,但我当然可能是错的.
现在,我试图训练网络,给它两个0到0.5之间的随机数(a,b),然后添加它们.然后,当然,每次网络给出的输出都与a + b的理论答案进行比较(这将始终由sigmoid函数实现).
奇怪的是,输出总是收敛到介于0和1之间的数字(因为它必须是因为S形函数),但是我输入的随机数似乎对它没有影响.
编辑:对不起,它似乎没有收敛.这是输出的图像:

权重随机分布在-1和1之间,但我也尝试过0到1之间.
我也尝试给它两个常数(0.35,0.9)并尝试训练它吐出0.5.这可以很快地收敛到0.5.如果我在0和1之间给它任意两个随机数,我也训练它吐出0.5,这也有效.
相反,我的目标是:
vector<double> target;
target.push_back(.5);
Run Code Online (Sandbox Code Playgroud)
然后它很快收敛,即使是随机输入:

我尝试了几个不同的网络,因为我很容易在我的网络中添加图层.我使用的标准是一个有两个输入,一个是2个神经元,第二个层只有一个神经元(输出神经元).但是,我也尝试添加几层,并为它们添加神经元.它似乎没有任何改变.我的学习率等于1.0,虽然我试过它等于0.5,并没有太大的不同.
有没有人知道我能尝试什么?
这甚至是ANN能够做到的吗?我无法想象它不会,因为他们可以接受训练来做这些复杂的事情.
有什么建议?谢谢!
这是我训练它的地方:
//Initialize it. This will be one with 2 layers, the first having 2 Neurons and the second (output layer) having 1.
vector<int> networkSize;
networkSize.push_back(2);
networkSize.push_back(1);
NeuralNetwork myNet(networkSize,2);
for(int i = 0; i<5000; i++){
double a = randSmallNum();
double b = randSmallNum();
cout << "\n\n\nInputs: " << a << ", " << b << " with expected target: " << a + b; …Run Code Online (Sandbox Code Playgroud)