我正在训练一个神经网络,用于讨人喜欢的手写数字比赛。为了练习R,我将Andrew Ng的神经网络八度音程编译成了R.所以我需要找到fmincg的替代品。
我找到了optimx并且使用了很多方法。我观察到fmincg比optimx更快更准确。
这是我的测试:
让我们在没有约束的情况下最小化y = x^4
。每个人都知道x
应该等于零。
这是我的matlab程序:
clc;
clear all;
close all;
options = optimset('MaxIter', 50);
init = 1:.1:50;
init = init';
newFunc = @(p) costFunc(p);
tic
[nn_params, cost] = fmincg(newFunc, init, options);
toc
costFunc
函数:
function [cost grad] = costFunc(x)
cost = sum(x.^4);
grad = 4*x.^3;
end
和R脚本:
costFunc = function (x)
{
return(sum(x^4))
}
grad = function(x) {
return(4*x^3)
}
startTime = proc.time()
results = optimx(seq(1, 50,.1), fn=costFunc, gr=grad,
itnmax=50, method=c("Rcgmin"))
proc.time() - startTime
Octave在0.064
秒后完成,准确度为10^-8
。
R在1.8
秒内完成,准确度仅为10^-4
。
当然这个问题太容易了。当我训练神经网络时,对于某些计算,八度音程可以在几分钟内给出结果,但R似乎永远在运行。
我想知道是否有人遇到过这个问题,谁能在R中建议更好的最小化函数作为八度音阶中fmincg的替代?